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);
}
}
}
}
}