当前位置: 首页 > 知识库问答 >
问题:

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

卜飞鸣
2023-03-14

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

共有3个答案

濮阳振海
2023-03-14

如果允许使用java中的类。时间包,然后你可以使用月(这是一个枚举)。这样你就不用创建自己的列表了。

此外,在用户选择一个月后,她需要选择一个日子。我假设用户应该输入一个有效的日子,例如,当输入的月份是二月时,输入数字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 {
                        int day = keyboard.nextInt();
                        keyboard.nextLine();
                        if (day < 0 || day > daysInMonth.lengthOfMonth()) {
                            System.out.printf("%s does not have %d days.%n", theMonth, day);
                        }
                        else {
                            game = false;
                        }
                    }
                    catch (InputMismatchException xInputMismatch) {
                        System.out.println("Please enter a number.");
                    }
                } while (game);
            }
            catch (IllegalArgumentException xIllegalArgument) {
                System.out.println("That is not a valid month");
            }
        } while (game);
    }
}

请注意,在这一行之后(来自上述代码):

int day = keyboard.nextInt();

有这样一句话:

keyboard.nextLine();

请参阅此SO问题,了解原因:扫描仪在使用Next()或nextFoo()后跳过nextLine()?

还要注意的是,您只需要创建一次扫描仪。在问题中的代码中,您在do while循环的每次迭代中都创建了一个扫描仪。

此外,如果您输入的值不存在于enum中,则会抛出IllegalArgumentExctive。
如果输入的值不是整数,则方法nextInt会抛出InputMismatchExctive

潘泰
2023-03-14

使用if(mylist.contains(选择))工作!非常感谢

公孙琛
2023-03-14

尝试测试是否包含月份list.contains()和其他方法中的天数

 类似资料:
  • 我是不是遗漏了什么,或者有什么特别的原因不起作用? 谢了!

  • 问题内容: 打开GUI窗口之前,从命令行获取输入时遇到了一些麻烦。我之前在Apple Exchange上问过这个问题,但是在我们确定这是一个编程问题后才发送到这里。基本上,在打开窗口之前,我正在运行扫描仪以获取用户输入,但它会启动程序,在Mac上切换空间,然后必须切换回带有终端的工作区才能回答问题。这是原始问题的链接。 https://apple.stackexchange.com/questio

  • 它在do while循环内的第三行崩溃,不等待我的输入: 堆栈跟踪: 线程“main”java中出现异常。util。非接触性异常 在爪哇。util。扫描仪。throwFor(未知来源) 在爪哇。util。扫描仪。下一个(未知源) java.util.canner.next国际(来源不明) java.util.canner.next国际(来源不明) 在主。river.main(river.java:

  • 我想用Android智能手机和inbuild指纹硬件创建一个考勤应用程序,因为很少有主管会在他们的Android智能手机上安装应用程序。他们将使用智能手机注册新用户的手指数据,他们必须以字节码或其他格式上传到服务器上,每当员工使用应用程序登录时,通过向服务器发送扫描的字节码或其他格式的数据,将手指与服务器进行检查,以比较授权用户并使其登录 我正在查看这些文档https://developer.an

  • 我想读取一个文本文件,并将每一行放入一个字符串(字符串数组)。然而,这需要扫描文件两次,一次是为了找出有多少行,另一次是为了创建一个这样大小的字符串数组。但它抛出了一个错误,重置方法似乎不起作用。 这是相关的代码片段。

  • 问题内容: 我的程序中有一个扫描仪,可以读取文件的一部分并将其格式化为HTML。当我读取文件时,我需要知道如何使扫描仪知道它在一行的末尾,然后开始写入下一行。 这是代码的相关部分,让我知道是否遗漏了什么: 我发现了有关,但是我仍然不知道如何确定何时到达终点。 问题答案: 如果只想使用Scanner,则需要创建一个临时字符串,将其实例化到数据网格的nextLine()(因此它仅返回跳过的行),并创建