Java 扫描器添加可变条件

Java scanner adding variable conditions

我想问一下,如果我想让他输入一个整数而不是我的用户输入一个字符或一个字符串,我该如何准确地调整我的程序的功能?我尝试按照我在此处用引号显示的方式进行操作,还尝试使用 "equals"。第二种方法不起作用,第一种似乎表现得很奇怪,IF 部分有效,但 ELSE 被完全忽略。

  public static void main(String[] args){

Scanner input=new Scanner(System.in);
System.out.print("Enter first integer: ");

int number1 = input.nextInt();// prompt
    if (number1 == (char)number1){

    System.out.println("Ok.");
    }
    else{  
     System.out.println("You were supposed to type in an int..");
     System.exit(1);
    }

System.out.print("Enter second integer: ");
int number2 = input.nextInt();// prompt
int sum =(number1 + number2);

System.out.printf("Your sum is: %d%n", sum);

  } 

您可以使用如下所示的用户定义函数并调用它

public static boolean isNum(String input)  
{  
  try  
  {  
    int d = Integer.parseInt(input);  
  }  
  catch(NumberFormatException e)  
  {  
    return false;  
  }  
  return true;  
}

然后你可以从你的主函数中调用这个方法。

if(isNum(number1))

Scanner.nextInt();将输入的下一个标记扫描为 int。 如果输入不是 int,程序将不会超出这一行执行。

所以它永远不会进入else部分。不要做任何 int 验证。

我建议始终使用 try/catch 块来处理不正确的输入并显示有用的消息。也不要忘记关闭 Scanner 对象。

我不确定我是否理解你的问题,但我是这样看的:

用户总是会从输入中键入一系列字符,然后您的程序必须检查该 String 是否可以转换为 Int,如果不能转换则应提示用户输入的数据是不是整数。在这种情况下,您的 nextInt 将抛出 InputMismatchException。

可能更优雅的解决方案是使用 hasNextInt(10): public static void main(String[] args){ 扫描器输入=新扫描器(System.in); System.out.print("Enter first integer: ");

    if (input.hasNextInt(10)){
        System.out.println("Ok. Typed number: " + input.nextInt());
    }else{  
        System.out.println("You were supposed to type in an int..");
        System.exit(1);
    }
[...]
}  

试试这个,

        try {
            int number1 = sc.nextInt();// prompt
            System.out.println("Ok.");
        } catch (InputMismatchException ex) {
            System.out.println("You were supposed to type in an int..");
            System.exit(1);
        }

我建议您在 hasNext() 函数中使用正则表达式,如下所示,以便更好地控制,例如,如果您查找数字,请使用以下模式,

sc.hasNext("[0-9]+")

这是 hasNext(String pattern) 函数的文档,

public boolean hasNext(Pattern pattern)

Returns true if the next complete token matches the specified pattern. A complete token is prefixed and postfixed by input that matches the delimiter pattern. This method may block while waiting for input. The scanner does not advance past any input.

这是执行检查的简单代码,

Scanner sc=new Scanner(System.in);
int input = 0;
while(true) {
    System.out.println("enter a number");
    if(sc.hasNext("[0-9]+")) {
        input = sc.nextInt();
        break;
    } else {
        System.out.println("not a number, try again");
        sc.next(); // just consume, but ignore as its not a number
    }
}
System.out.println("Entered number is : "+input);