Java の入門からマスターまでの章の演習 - 第 12 章
演習 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);
}
}
演習 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);
}
}
}
演習 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);
}
}
演習 4 梁山の英雄を見つける
総合演習 4: 涼山の英雄を探す 「水滸伝」の涼山の英雄トップ 10 のニックネームと名前を形式に従って出力します (「胡宝儀 宋江」、「志多興 呉勇」など)。 )。涼山の英雄のニックネーム (「Zhi Duoxing」など) がコンソールに入力されると、コンソールは涼山の英雄の名前を出力します。
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));
}
}
演習 5 サイコロを振る
総合演習 5: サイコロをプレイする Zhang San、Li Si、Wang Wu、Zhao Liu はサイコロ ゲームをプレイし、点数を比較します (注意: サイコロの点数を ArrayList コレクションに追加し、サイコロの名前 (キー) と点数を追加します)。 Map コレクション ( 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);
}
}
}
}
}