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

关于扫描仪(BlueJ)的问题

夏嘉德
2023-03-14

我们对此任务有一些指导方针:1。使用scanner(scanner scanner=new scanner(system.in);)2。使用方法scanner.nextline()

我们必须一步一步地构建一个游戏(Mastermind),我总是在使用nextInt()和switchcase(用于输入不是int的东西)时出错(BlueJ)顺便说一句:我们不应该使用nextint-我们应该使用nextline--但我如何使用switchcase来实现这一点?

import java.util.Scanner;
public class Game {
/**
 * Methods
 */
public void play() {
    System.out.println("*******************  Game  **********************");
    System.out.println("* (1) CPU vs Human                              *");
    System.out.println("* (2) CPU vs CPU                                *");
    System.out.println("* (3) Human vs CPU                              *");
    System.out.println("* (4) Highscore                                 *");
    System.out.println("* (5) End                                       *");
    System.out.println("-------------------------------------------------");
    System.out.println("Your choice:                                    ");

    Scanner scanner = new Scanner(System.in);

    // i used this so far but i get an error for entering a-z or other stuff than numbers
    int userInput = scanner.nextInt();  

    //i have to use this but it doesnt work with switchcase - any suggestions?
    //String userInput = scanner.nextLine(); 

    scanner.close();
    switch(userInput) {
        case 1: // not written yet
        case 2: // not written yet
        case 3: // not written yet
        case 4: // not written yet
        case 5: System.exit(0);
        default: System.out.println("Illegal userinput! Only enter numbers between 1 and 5!");
    }
  }
}

共有1个答案

后凯捷
2023-03-14

您需要做的是使用integer.parseInt(strings)方法将字符串(由.nextline()方法生成)解析为整数。如果给定的字符串不是整数,此方法将抛出NumberFormatException,您可以捕获该字符串并使用它来了解用户何时输入了无效的数字,以便再次询问他/她。

类似于:

public static void main(String[] args)
{
    boolean validInput = false;
    Scanner scanner = new Scanner(System.in);
    while (!validInput)
    {
        System.out.println("*******************  Game  **********************");
        System.out.println("* (1) CPU vs Human                              *");
        System.out.println("* (2) CPU vs CPU                                *");
        System.out.println("* (3) Human vs CPU                              *");
        System.out.println("* (4) Highscore                                 *");
        System.out.println("* (5) End                                       *");
        System.out.println("-------------------------------------------------");
        System.out.println("Your choice:                                    ");

        try
        {

            // i used this so far but i get an error for entering a-z or other stuff than numbers
            int userInput = Integer.parseInt(scanner.nextLine().trim());
            //If no error took place, then the input is valid.
            validInput = true;

            //i have to use this but it doesnt work with switchcase - any suggestions?
            //String userInput = scanner.nextLine();                 
            switch (userInput)
            {
                case 1: // not written yet
                case 2: // not written yet
                case 3: // not written yet
                case 4: // not written yet
                case 5:
                    System.exit(0);
                default:
                    validInput = false;
                    System.out.println("Illegal userinput! Only enter numbers between 1 and 5!");
            }
        } catch (Exception e)
        {
            System.out.println("Invalid Input, please try again");
        }
    }
    scanner.close();
}
 类似资料:
  • 我是java新手,我的任务是使用扫描器读取数组,并在另一种方法中读取int。 我正在做的是计算一只兔子到达河对岸所需的最小跳跃次数。数组中的int表示从河的一边开始的石头的距离,另一个int表示石头的数量。兔子能跳的最远距离是50。 对于输入和输出: 输入n:7(输入,河中的石头数)32 46 70 85 96 123 145(输入,石头与起点之间的距离,最后一个数字是河的宽度,即目的地(河对岸)

  • 我有两个do-while循环用于进行自定义输入验证。问题是它会自动进入下一个do while循环。正确插入名称后,我必须放置一个新的下一行():name=scanner。nextLine() 我知道当光标停留在那里时,nextLine()会出现“小故障”,您必须调用nextLine()才能继续。资料来源:https://www.geeksforgeeks.org/why-is-scanner-sk

  • 问题内容: 如何将扫描仪的定界符设置为;或换行? 我试过: 但这不起作用。 问题答案: 通常,在模式中,您需要将翻倍。 所以,尝试 要么 编辑 :如果是问题,则可能要尝试以下操作: 它匹配的一个或多个,和。 注意 :我还没有尝试过这些。

  • 问题内容: 我正在尝试读取具有多个单词的字符串,即。洛杉矶或纽约市。如果有两个词并将它们分割在变量之间,则使用scanner.next()进行“出发”和“到达”只会读取第一个。nextLine()也不是很幸运。这是我的代码: 我知道这很简单,但我还没有弄清楚。 这是上面的代码的输入/输出: 输入航班号:29 输入出发城市:(立即跳至下一行) 输入到达城市: -—我真正想要的是---- 输入航班号:

  • 问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和

  • 问题内容: 使用Scanner类中的useDelimiter时遇到一些问题。 如果我有这个输入 美国广播公司 输出将是 AB 然后等到我键入另一个“-”以打印出最后一个字符 但是,如果我没有用户输入数据,而是将字符串插入到Scanner中,则代码将起作用。原因是什么?如何解决?我不想使用StringTokenzier 问题答案: 如果没有等待您输入另一个,则将错误地假定您已完成输入。 我的意思是,