如何让我的扫描仪识别我拥有的单词

How to get my scanner to recognize the words i have for it

提问人:David Armstrong 提问时间:3/11/2022 最后编辑:AbraDavid Armstrong 更新时间:3/12/2022 访问量:131

问:

我对 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);
    }
}
Java 数组 字符串 java.util.scanner

评论

3赞 Johannes Kuhn 3/11/2022
尝试。mylist.contains(Choice)
1赞 jhamon 3/11/2022
与您的问题无关:Java 命名约定
3赞 Abra 3/11/2022
Choice.equals(mylist)这永远不会是真的。它正在检查 a 是否等于 .两个不同类型的变量永远不可能相等。StringList
1赞 DontKnowMuchBut Getting Better 3/11/2022
小狡辩:您的问题标题非常混乱,因为扫描仪没有用于识别任何东西。它仅用于捕获用户的输入。

答:

2赞 Abdelkader Chhaibi 3/11/2022 #1

尝试测试是否包含其他方法中的月份和日期,只需调用它即可list.contains()

评论

0赞 David Armstrong 3/11/2022
有没有办法使月份不区分大小写?
0赞 Abra 3/12/2022
@DavidArmstrong引用方法toUpperCase
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);
    }
}

请注意,您只需要创建一次。在问题的代码中,您将在循环的每次迭代中创建一个。ScannerScannerdo-while

此外,如果输入的值不存在于 ,则会引发 IllegalArgumentException
如果输入的值不是整数,则会引发方法。
enumparseIntNumberFormatException