Java从入门到精通章节练习题——第十二章

Exercise 1 26个英文字母的正反输出

综合练习1:26个英文字母的正反输出 使用数组和ArrayList类,先输出A→Z,再输出z→a。

package org.hj.chapter12;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author HuJun
 */
public class EnglishLetters {
    
    

    /**
     * 综合练习1:26个英文字母的正反输出 使用数组和ArrayList类,先输出A→Z,再输出z→a。
     */

    public static void main(String[] args) {
    
    
        List<Character> letters = new ArrayList<>();
        //循环加入 26 个字母
        for (char i = 'a'; i <= 'z'; i++) {
    
    
            letters.add(i);
        }

        //输出A→Z,需要转成大写字母
        ArrayList<Character> newLetters = new ArrayList<>();
        for (char i = 0; i < 26; i++) {
    
    
            //利用字符转换大写方法
            newLetters.add(Character.toUpperCase(letters.get(i)));
        }
        System.out.println(newLetters);

        //输出z→a
        List<Character> collect = letters.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        System.out.println(collect);
    }
}

Exercise 2 模拟账户存取款

综合练习2:模拟账户存取款 使用ArrayList类模拟账户存取款,运行结果如下图所示。
在这里插入图片描述

package org.hj.chapter12;

import java.util.ArrayList;
import java.util.List;

/**
 * @author HuJun
 */
public class DepositAndWithdrawalFunds {
    
    

    /**
     * 综合练习2:模拟账户存取款 使用ArrayList类模拟账户存取款
     */

    public static void main(String[] args) {
    
    

        //保存余额的List
        List<String> balance = new ArrayList<>();
        balance.add("2015-05-06\t\t\t2000\t\t0\t\t2000");
        balance.add("2015-05-18\t\t\t0\t\t1000\t\t1000");
        balance.add("2015-06-08\t\t\t5000\t\t0\t\t6000");
        balance.add("2015-06-23\t\t\t0\t\t1500\t\t4500");
        balance.add("2015-07-03\t\t\t3000\t\t0\t\t7500");
        balance.add("2015-07-19\t\t\t0\t\t1000\t\t6500");
        balance.add("2015-08-01\t\t\t1000\t\t0\t\t7500");
        balance.add("2015-08-10\t\t\t0\t\t1000\t\t6500");
        System.out.println("存、取款时间\t\t\t存入\t\t支出\t\t余额");
        for (String s : balance) {
    
    
            System.out.println(s);
        }
    }
}

Exercise 3 给随机数组排序

综合练习3:给随机数组排序 随机数组就是在指定长度的数组中用随机数字为每个元素赋值,这常用于需要不确定数值的环境,如拼图游戏需要随机数组来打乱图片排序。可是同时也存在问题,就是随机数的重复问题,这个问题也常常被忽略,请利用TreeSet集合实现不重复的数列,并自动完成元素的排序,然后生成数组,效果如下图所示。
在这里插入图片描述

package org.hj.chapter12;

import java.util.Set;
import java.util.TreeSet;

/**
 * @author HuJun
 */
public class SortRandomArray {
    
    

    public static void main(String[] args) {
    
    

        Set<Integer> set = new TreeSet<>();
        for (int i = 0; i < 10; i++) {
    
    
            //随机生成0-100的整数
            int v = (int) (Math.random() * 100 + 1);
            set.add(v);
        }
        //随机生成的集合
        System.out.println("生成无重复元素且升序排列的随机数组如下:");
        System.out.println(set);
    }
}

Exercise 4 寻找梁山好汉

综合练习4:寻找梁山好汉 在控制台上按格式(如“呼保义宋江”“智多星吴用”等)输出《水浒传》中梁山前十位好汉的绰号和人名。当在控制台上输入一位梁山好汉绰号(如“智多星”)时,控制台会输出这位梁山好汉的人名。

package org.hj.chapter12;

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author HuJun
 */
public class Find108StarsOfDestiny {
    
    

    public static void main(String[] args) {
    
    

        HashMap<String, String> map = new HashMap<>();
        map.put("呼保义", "宋江");
        map.put("玉麒麟", "卢俊义");
        map.put("智多星", "吴用");
        map.put("入云龙", "公孙胜");
        map.put("豹子头", "林冲");
        map.put("霹雳火", "秦明");
        map.put("双鞭", "呼延灼");
        map.put("小李广", "花荣");
        map.put("小旋风", "柴进");
        map.put("扑天雕", "李应");

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一位梁山好汉绰号:");
        String s = scanner.nextLine();
        System.out.println(map.get(s));
    }
}

Exercise 5 玩骰子

综合练习5:玩骰子 张三、李四、王五、赵六玩掷骰子游戏,比点数大小(提示:向ArrayList集合中添加骰子的点数,向Map集合添加姓名(key)和骰子的点数(value),其中value是随机的ArrayList集合中的元素。如果value值有重复,重新开始;如果value的值没有重复,输出点数最大的那个人的姓名)。

package org.hj.chapter12;

import java.util.*;

/**
 * @author HuJun
 */
public class Dice {
    
    

    public static void main(String[] args) {
    
    

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", list.get((int) (Math.random() * 5) + 1));
        map.put("李四", list.get((int) (Math.random() * 5) + 1));
        map.put("王五", list.get((int) (Math.random() * 5) + 1));
        map.put("赵六", list.get((int) (Math.random() * 5) + 1));


        List<String> duplicateValues = new ArrayList<>();
        List<Integer> values = new ArrayList<>(map.values());

        for (int i = 0; i < values.size(); i++) {
    
    
            for (int j = i + 1; j < values.size(); j++) {
    
    
                if (values.get(i).equals(values.get(j))) {
    
    
                    duplicateValues.add(map.keySet().toArray()[i].toString());
                    duplicateValues.add(map.keySet().toArray()[j].toString());
                }
            }
        }
        if (!duplicateValues.isEmpty()) {
    
    
            System.out.println("出现相同点数,重新投掷");
            return;
        }

        Optional<Integer> first = map.values().stream().sorted(Comparator.reverseOrder()).findFirst();
        String name;
        if (first.isPresent()) {
    
    
            for (Map.Entry<String, Integer> entry : map.entrySet()) {
    
    
                if (entry.getValue().equals(first.get())) {
    
    
                    name = entry.getKey();
                    System.out.println("最大点数:" + name + ":" + first);
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/dedede001/article/details/130338750
今日推荐