于敏、王大珩、王希季、朱光亚、孙家栋、任新民、吴自良、陈芳允、陈能宽、杨嘉墀、周光召、钱学森、屠守锷、黄纬禄、程开甲、彭桓武,王淦昌、邓稼先、赵九章、姚桐斌、钱骥、钱三强、郭永怀。 设计实现一个代号对应名字的猜字系统,需要实现当猜测失败后,随机出提醒,提醒包括首字的笔画,总笔画,首字拼音字母等其中之一。请使用Java编写。
时间: 2023-09-14 07:06:16 浏览: 104
“于敏构型”成本与技术应用.docx
好的,我可以为您实现这个猜字系统。以下是代码实现:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
public class GuessNameSystem {
private static final Map<String, String> NAME_MAP = new HashMap<>(); // 代号和名字的映射表
private static final String[] REMINDERS = {"首字笔画:2", "总笔画:13", "首字拼音:Y"}; // 猜错后的提醒列表
private static final Random RANDOM = new Random();
static {
NAME_MAP.put("DM", "于敏");
NAME_MAP.put("WDH", "王大珩");
NAME_MAP.put("WXJ", "王希季");
NAME_MAP.put("ZGY", "朱光亚");
NAME_MAP.put("SJD", "孙家栋");
NAME_MAP.put("RXM", "任新民");
NAME_MAP.put("WZL", "吴自良");
NAME_MAP.put("CFY", "陈芳允");
NAME_MAP.put("CNK", "陈能宽");
NAME_MAP.put("YJC", "杨嘉墀");
NAME_MAP.put("ZGZ", "周光召");
NAME_MAP.put("QXS", "钱学森");
NAME_MAP.put("TSE", "屠守锷");
NAME_MAP.put("HWL", "黄纬禄");
NAME_MAP.put("CKJ", "程开甲");
NAME_MAP.put("PHW", "彭桓武");
NAME_MAP.put("WGC", "王淦昌");
NAME_MAP.put("DJX", "邓稼先");
NAME_MAP.put("ZJZ", "赵九章");
NAME_MAP.put("YTB", "姚桐斌");
NAME_MAP.put("QJ", "钱骥");
NAME_MAP.put("QSQ", "钱三强");
NAME_MAP.put("GYH", "郭永怀");
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String code;
String name;
do {
code = generateCode(); // 生成随机代号
name = NAME_MAP.get(code);
System.out.print("请猜测代号对应的名字(输入Q退出):");
String guess = scanner.next();
if (guess.equalsIgnoreCase("Q")) {
break;
}
if (guess.equals(name)) {
System.out.println("恭喜你,猜对了!");
break;
} else {
System.out.println("猜错了,这个名字不是 " + guess);
System.out.println("提醒:" + REMINDERS[RANDOM.nextInt(REMINDERS.length)]);
}
} while (true);
scanner.close();
}
// 生成随机代号
private static String generateCode() {
String[] codes = NAME_MAP.keySet().toArray(new String[0]);
return codes[RANDOM.nextInt(codes.length)];
}
}
```
这个程序会随机生成一个代号,然后让用户猜测对应的名字。如果猜错了,会随机出一个提醒,包括首字的笔画、总笔画和首字拼音字母中的一个。如果猜对了,程序就结束了。
阅读全文