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

在分配给int变量之前检查用户输入(扫描仪)

尚安平
2023-03-14
int i;
Scanner scan = new Scanner(System.in) {
i = scan.nextInt();
}

我想做的是当用户输入一个字符而不是一个整数时,在扫描仪中捕捉错误。我尝试了下面的代码,但最终调用了另一个用户输入(例如,在验证第一次扫描后为I赋值时调用另一个scan.netInt())。仅限数字的nextInt():

int i;
Scanner scan = new Scanner(System.in) {

    while (scan.hasNextInt()){
    i = scan.nextInt();
    } else {
    System.out.println("Invalid input!");
    }
}

共有1个答案

步胜
2023-03-14

你的逻辑似乎有点不对劲,如果输入无效,你必须使用它。此外,你的匿名块看起来很奇怪。我想你想要这样的东西

int i = -1; // <-- give it a default value.
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) { // <-- check for any input.
    if (scan.hasNextInt()) { // <-- check if it is an int.
        i = scan.nextInt(); // <-- get the int.
        break; // <-- end the loop.
    } else {
        // Read the non int.
        System.out.println("Invalid input! " + scan.next()); 
    }
}
 类似资料:
  • 问题内容: 与空检查相比,变量分配是否昂贵?例如,在将foo分配为null之前是否值得检查其是否为null? 还是这无所顾忌? 问题答案: 这是一个微微优化(可能还是由编译器处理)。不用担心 通过专注于程序的实际算法,您将获得更大的回报。 我们应该忘记效率低下的问题,例如大约97%的时间:过早的优化是万恶之源。-唐纳德​​·努斯

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

  • 我对Java完全陌生,这是我用Java语言尝试的第一个程序。我在谷歌上搜索了一下,但似乎找不到一个可以理解的解释,说明如何使用scanner将用户输入分配给变量。我不完全确定扫描仪是什么,这可能是问题的一部分。 我已经阅读了这里的文档(http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html). 它谈论了很多关于reg-ex的事

  • 问题内容: 我试图通过限制用户可以输入的内容来使用户输入不使程序崩溃,例如: 只是一个int 在1到30之间 我编写的代码只能在一定程度上起作用。如果您输入的内容不是整数,它将对其进行检查并要求您再次输入。如果您继续输入除int以外的任何内容,则再次输入。我还有另一个while循环,如果它确实输入一个int,并且它在1-30区域之外,则它将要求用户再次输入。但是,此后,如果用户键入另一个“除int

  • 因此,我是Java新手,正在尝试将一个变量从扫描器传递到getter/setter方法,以便根据输入的数字对数组进行不同的排序。 我把它放在列表排序的地方;问题是我的扫描仪重复了你必须在列表出现之前多次输入你的选择。 我知道这个问题与调用“int c=assign_6.choice()”有关。如果我硬编码一个数字,它没问题,但它似乎正在多次调用select()函数。 我尝试过将函数移出main,删

  • 我需要用户输入介于1和301之间的int。我在这里有一个简单的循环来检查用户输入。我只需要用户输入一个数字,如果用户输入的不是介于1和301之间的int,我想显示打印行并提示用户重试,直到他们输入有效的输入。 这会检查输入是否为int,但我似乎找不到给int输入一个界限的方法。我试图将用户输入分配给一个变量,然后检查条件输入 也许有更好的设计来实现这一切。这些也受到欢迎。 提前谢谢。