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

如何使用扫描仪下一步填充多个数组值?

谭志用
2023-03-14

我有一系列骰子,对于每个骰子,我需要提示用户是否要重新滚动它。最简单的方法似乎是使用扫描仪类进行提示 - 我检查他们输入的内容并适当地处理。但是,如果用户输入中不存在请求的数据,则 scanner.next() 将引发异常。所以,扫描仪.hasnext()需要以某种方式适应这里。

这是我的密码;它会将条目输入到响应数组中,但如果用户输入既不包含Y也不包含N,则会抛出异常。

public Boolean[] chooseDice(int diceNum){
    Boolean[] responses = new Boolean[diceNum];
    Scanner scansworth = new Scanner(System.in);
    for (int i=0; i<diceNum; i++){
        System.out.printf("Reroll this die? (%d)\n",i);
                responses[i] = (scansworth.next("[YN]")) == "Y" ? true : false;
    }
        return responses;

我如何调用scansworth.hasNext("[YN]"),以便解释器不会锁定,并在循环的每一步之后正确地检查入口?

共有2个答案

柯子琪
2023-03-14

我觉得你可以试试这样的东西.....

public Boolean[] chooseDice(int diceNum){
    Boolean[] responses = new Boolean[diceNum];
    boolean isCorrect = false;
    Scanner scansworth = new Scanner(System.in);
    for (int i=0; i<diceNum; i++){

while(!isCorrect){

if((scansworth.hasNext().equalsIgnoreCase("Y")) ||  (scansworth.hasNext().equalsIgnoreCase("N")))`{



    responses[i] = scansworth.next();
    isCorrect = true;

}else{

       isCorrect = false;


    }
  }

}
谷梁楚青
2023-03-14

您可以将读取代码的用户输入包围一段时间,以检查用户输入是否处于给定模式……使用hasNext(“[YN]”)..此外,您不需要scanner.next。。

 for (int i=0; i<diceNum; i++){
           int count = 0;
           System.out.printf("Reroll this die? (%d)\n",i);

           // Give three chances to user for correct input.. 
           // Else fill this array element with false value..

           while (count < 3 && !scansworth.hasNext("[YN]")) {
               count += 1;  // IF you don't want to get into an infinite loop
               scansworth.next();
           }    

           if (count != 3) {
                /** User has entered valid input.. check it for Y, or N **/
                responses[i] = (scansworth.next()).equals("Y") ? true : false;
           } 
           // If User hasn't entered valid input.. then it will not go in the if  
           // then this element will have default value `false` for boolean..
 }

 类似资料:
  • 在分离标记之前,我试图检查扫描仪是否有多个标记。我目前正在尝试使用扫描仪。hasNext()(我的扫描仪的名字是sc)。如果用户输入“string int”,那么我不想打印“enter age”或“enter grade” 目前,无论输入是什么,我的程序都会跳过if语句。如果我把它拿走!然后,即使输入是一行,这些行也会打印出来。他们似乎也打印后,下一个是我发现奇怪的。我将非常感谢您的帮助!

  • 我是java新手,我的任务是使用扫描器读取数组,并在另一种方法中读取int。 我正在做的是计算一只兔子到达河对岸所需的最小跳跃次数。数组中的int表示从河的一边开始的石头的距离,另一个int表示石头的数量。兔子能跳的最远距离是50。 对于输入和输出: 输入n:7(输入,河中的石头数)32 46 70 85 96 123 145(输入,石头与起点之间的距离,最后一个数字是河的宽度,即目的地(河对岸)

  • 我不知道如何创建一个字符数组,更糟糕的是,一个作为“扫描器”(System.in)的数组。我会解释: 我想输入一个名字,并从每个字母中接收(输出)等效的数字。但是我不知道怎么做。例如: 但我不希望有一个整数,我希望每个数都是一个完全独立的索引,因为我要“算名字”。 下面是我在没有扫描仪的情况下尝试的一个例子: 9数组的每个索引都是一个有3个字母的字符数组。也许我的想法完全错误。 非常感谢大家的关注

  • 问题内容: 今天早些时候,我问如何在不陷入无限循环的情况下重试/捕获输入不匹配异常 但是这是两个过程,首先,游戏会要求用户提供网格的大小,然后在启动后,游戏会要求用户设置标志或跨过一个单元格(如果我的游戏在其他单元格之上,会打印出周围的地雷数量),但是我收到一些奇怪的错误代码: 错误: 在我的打印语句之间打印异常消息的奇怪的事情(网格是一条语句,指令也是一条) 进行搜索时,我发现无法在同一位置使用

  • 我有一个Java程序,需要在多个类的多个点上从控制台获取用户输入。我试着在每节课上使用一台扫描仪,但当我关闭一台扫描仪时,它会关闭系统。所以我想在整个程序中使用相同的扫描仪。我在主类中打开了扫描仪,但在其他类中如何使用相同的扫描仪?

  • 问题内容: 也就是说,如何在不删除迭代器的情况下获取它的下一个元素?由于我可能想要也可能不想删除它,具体取决于它的内容。我有一个文件扫描仪,使用扫描仪的next()方法遍历XML标签。 提前致谢。 问题答案: 这是一个非常丑陋的解决方案,但是您可以创建一个包装类,围绕该包装类保留两个内部对象。您可以通过使第二台扫描仪先于另一台来获得功能 这是一个非常基本的解决方案(只是让您了解我在说什么),并没有