提问人:David Armstrong 提问时间:3/11/2022 最后编辑:AbraDavid Armstrong 更新时间:3/12/2022 访问量:131
如何让我的扫描仪识别我拥有的单词
How to get my scanner to recognize the words i have for it
问:
我对 java 和一般编码很陌生,正试图弄清楚如何让这个游戏在学校的一个项目中工作。它旨在让您输入一个月,然后它会要求您选择一天,但是当我输入一个月时,它总是说它是一个无效的输入,这是我希望它在它不是有效月份时所做的。我做错了什么?
import java.util.*;
class Main {
public static void main(String[] args) {
boolean game = true;
do {
System.out.println("Welcome to the Famous Date game!");
System.out.println("Please choose a month");
Scanner Month = new Scanner(System.in);
String Choice = Month.nextLine();
String[] Months = {"January", "February", "March", "April", "May", "June","July",
"August","September","October","November", "December"};
List<String> mylist = Arrays.asList(Months);
if (Choice.equals(mylist)) {
System.out.println("Please choose a day");
}
else
System.out.println("That is not a valid month");
}
while (game=true);
}
}
答:
2赞
Abdelkader Chhaibi
3/11/2022
#1
尝试测试是否包含其他方法中的月份和日期,只需调用它即可list.contains()
0赞
Abra
3/11/2022
#2
如果允许您使用 java.time 包中的类,那么您可以使用 Month(这是一个枚举)。这使您不必创建自己的列表。
此外,在用户选择月份后,她需要选择一天。我假设用户应该输入一个有效日期,例如,当输入的月份是 2 月时输入数字 30 将构成无效日期。为了检查输入的日期是否有效,您可以使用类 YearMonth,它有一个返回每个月的天数并考虑闰年的方法。请参阅此 SO 问题:特定年份特定月份的天数?
这是一个 SSCCE
(代码后面的注释。
import java.time.LocalDate;
import java.time.Month;
import java.time.YearMonth;
import java.time.temporal.ChronoField;
import java.util.InputMismatchException;
import java.util.Scanner;
public class GameMain {
public static void main(String[] args) {
int year = LocalDate.now().get(ChronoField.YEAR);
Scanner keyboard = new Scanner(System.in);
boolean game = true;
do {
System.out.print("Please choose a month: ");
String month = keyboard.nextLine();
try {
Month theMonth = Month.valueOf(month.toUpperCase());
YearMonth daysInMonth = YearMonth.of(year, theMonth);
do {
System.out.print("Please choose a day: ");
try {
String val = keyboard.nextLine();
int day = Integer.parseInt(val);
if (day < 0 || day > daysInMonth.lengthOfMonth()) {
System.out.printf("%s does not have %d days.%n", theMonth, day);
}
else {
game = false;
}
}
catch (NumberFormatException xNumberFormat) {
System.out.println("Please enter a number.");
}
} while (game);
}
catch (IllegalArgumentException xIllegalArgument) {
System.out.println("That is not a valid month");
}
} while (game);
}
}
请注意,您只需要创建一次。在问题的代码中,您将在循环的每次迭代中创建一个。Scanner
Scanner
do-while
此外,如果输入的值不存在于 ,则会引发 IllegalArgumentException。
如果输入的值不是整数,则会引发方法。enum
parseInt
NumberFormatException
评论
mylist.contains(Choice)
Choice.equals(mylist)
这永远不会是真的。它正在检查 a 是否等于 .两个不同类型的变量永远不可能相等。String
List