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

使用java扫描仪在接受用户输入时检查两个条件

纪翰
2023-03-14

我需要用户输入介于1和301之间的int。我在这里有一个简单的循环来检查用户输入。我只需要用户输入一个数字,如果用户输入的不是介于1和301之间的int,我想显示打印行并提示用户重试,直到他们输入有效的输入。

        while (!sc.hasNextInt()) {
            System.out.print("Invalid Input. Please enter a valid number between 1 and 301: ");
            sc.next();
        }
        int numToCheck = sc.nextInt();
        // do stuff with numToCheck

这会检查输入是否为int,但我似乎找不到给int输入一个界限的方法。我试图将用户输入分配给一个变量,然后检查条件输入

也许有更好的设计来实现这一切。这些也受到欢迎。

提前谢谢。

共有3个答案

容阳焱
2023-03-14

假设您只需要用户的一个输入,请尝试以下简单代码,该代码从用户处获取输入,直到用户输入有效的输入。

Scanner in = new Scanner(System.in);
     int flag = 0,x=0;
     while(flag == 0){
         x = in.nextInt();
         if(x<1 || x>301){
             flag = 0;
             System.out.println("Invalid Input.");
         }
         else{
             flag = 1;
         }
     }

如果您希望用户输入超过1个输入(即此处为3个),请设置一个计数器,该计数器随用户的每个有效输入而增加,如下所示:

 Scanner in = new Scanner(System.in);
     int flag = 0,x=0,count = 1;
     while(flag == 0){
         x = in.nextInt();
         if(x<1 || x>301){
             flag = 0;
             System.out.println("Invalid Input.");
         }
         else{
             //executes when input is valid
             if(count == 3){
                 flag = 1;
             }
             count++;

         }
     }

编辑:

如果您还想检查输入是否为整数,那么您必须在上面的代码中添加一个额外的条件。正如您所说,您只想要用户的一个输入而不是3,您必须更改退出条件。更改代码如下:

Scanner in = new Scanner(System.in);
 int flag = 0,count = 1,x=0,flag1 = 0;
 String y;
 while(flag == 0){
     y = in.next();
     flag1 = 0;
     try{
         x = Integer.parseInt(y);
     }
     catch(NumberFormatException e){
         flag1 = 1;
         System.out.println("Invalid Input.");
     }
     if((x<1 || x>301)&&flag1 == 0){
         flag = 0;
         System.out.println("Invalid Input.");
     }
     else if(flag1 == 0){
         //executes when input is valid
         if(count == 1){   // put count == 3 if you want 3 inputs from user.
             flag = 1;
         }
         count++;
     }
 }

这里,我们将输入作为字符串,然后使用整数将字符串转换为整数。parseInt()。如果字符串不是整数,它将抛出异常,我们将继续循环,直到用户输入有效输入。

夹谷斌蔚
2023-03-14

我运行了这段代码,看看它是否比您的性能更好。

Scanner sc = new Scanner(System.in);

boolean valid = true;
do {
    if (!valid) {
        System.out.print("Invalid Input. ");
    }
    System.out.print("Please enter a valid number between 1 and 301: ");
    String input = sc.next();
    try {
        int value = Integer.parseInt(input);
        valid = (value >= 1 && value <= 301);
    } catch (NumberFormatException nfex) {
        valid = false;
    }
} while (!valid);

当转换为整数失败时,JVM会挂起一点。我相信您的问题更多地与Scanner在幕后执行的try/cat机制有关,而不是与设计有关。

凌联
2023-03-14

您没有保存输入的值。因此,您的程序正在等待用户在每次看到“sc.nextInt()”时输入一个数字,将输入分配给变量,然后检查条件。编辑:好的,我会为你付出额外的努力。看看这是否有效。

***考虑了用户可能输入字符而不是数字的情况。

import java.util.*;
public class HelloWorld{

public static void main(String []args){
    Scanner sc = new Scanner(System.in);
    int input;
    while (true){
        if (sc.hasNextInt()){
             input = sc.nextInt(); // Assign the next integer to a variable
             if (input  <= 301  && input >= 1){ // Check if integer meets condition
                   break; // Condition met, break out of loop
            }
        }else{
              sc.next();
        }
        System.out.println("Invalid Input. Please enter a valid number between 1 and 301: ");
    }
}

}

 类似资料:
  • 问题内容: 对于Java练习,我试图创建一个程序,该程序从键盘读取整数,直到输入负数为止。 并打印整数的最大值和最小值,而忽略负数。 一旦运行,是否可以在同一程序中进行连续输入?我必须每次都继续运行该程序以输入数字。 任何帮助,将不胜感激 这是我的代码的一部分-它可以工作,但是我认为有一种更简单的方法可以执行我想要的操作,但不确定如何操作! 问题答案:

  • 对于java实践,我正在尝试创建一个程序,从键盘读取整数,直到输入负数。 它打印整数的最大值和最小值,忽略负数。 是否有一种方法可以在同一个程序运行后继续输入?每次输入一个数字,我都要继续运行程序。 任何帮助将不胜感激 这是我的代码的一部分-它可以工作,但我认为有一种更简单的方法可以做我想做的事情,但不确定如何做!

  • 问题内容: 我正在尝试让扫描仪在循环中进行输入。一旦用户想要完成操作,他就可以退出此循环。我尝试了许多不同的方法来执行此操作,但始终存在一些问题。这是代码: 上面代码的问题(在我尝试的其他方法上也会发生)是,当用户键入 Y时 ,将跳过名字的第一个输入,并跳转到姓氏。如果用户键入 N, 则循环将正确停止。有人可以解释发生这种情况的原因,以及如何克服使用课堂的问题? ps:执行类似的操作,将导致循环终

  • 我正在尝试通过单行输入检索用户输入:例如,使用扫描仪分隔符为Comma5,6,4,8,9。如何使用这种类型的输入检索任意数量的整数?也就是说,不必询问用户希望输入多少个整数。下面是我一直在使用的代码,但是当我想中断时,不能中断while循环。请注意,我保留System.Out以跟踪程序当前运行的位置。令人困惑的是,我可以以这种格式获得用户输入,但程序停止并再次要求用户输入,然后如果输入是一个整数,

  • 我很难想出如何正确使用扫描仪来验证用户输入。例如,程序需要用户输入int,用户只能输入正数,如果用户输入“apple”、“delicious apple”或负数,问题将显示错误消息。我尝试了下面的代码,然后我发现了一个令人不安的问题,“那不是一个数字!”我不知道是什么引起了这些问题。。。。 我在“number=sc.nextInt()”下面加了一行代码,意外地解决了这个问题,现在我的代码变成: 这

  • 我正在尝试编写一个扫描器,以便每次\n被检测到,它会扫描那之后的行,直到一个新的\n出现。我第一次试过这样的东西。 它起作用,输出为 然而,当我尝试用扫描器(System.in)做同样的事情时,即使输入相同,它也不能以同样的方式工作 输出: 编辑:如果输入为 并立即输入提示符,那么Scanner.nextLine()是否就足够了?