Scanner kb = new Scanner(System.in);
int num1;
int num2 = 0;
System.out.print("Enter number 1: ");
num1 = kb.nextInt();
while(num2 < num1) {
System.out.print("Enter number 2: ");
num2 = kb.nextInt();
}
数字2必须大于数字1
我还希望程序自动检查并忽略用户是否输入字符而不是数字。因为现在当用户输入例如
r
而不是数字时,程序将退出。#1 楼
使用Scanner.hasNextInt()
:如果可以使用true
方法将此扫描器输入中的下一个标记解释为默认基数中的int
值,则返回nextInt()
。扫描程序不会越过任何输入。以下代码片段说明:
Scanner sc = new Scanner(System.in);
System.out.print("Enter number 1: ");
while (!sc.hasNextInt()) sc.next();
int num1 = sc.nextInt();
int num2;
System.out.print("Enter number 2: ");
do {
while (!sc.hasNextInt()) sc.next();
num2 = sc.nextInt();
} while (num2 < num1);
System.out.println(num1 + " " + num2);
您不必
parseInt
或担心NumberFormatException
。请注意,由于hasNextXXX
方法不会超越任何输入,因此,如果您想跳过“垃圾”,则可能必须调用next()
,如上所示。相关问题
输入错误的类型时,如何防止扫描仪抛出异常? (java)
评论
您可以使用其他数据类型,例如Double引用类型。例如:“ scanner.hasNextDouble()”
– TeachMeJava
18-10-10在19:22
#2 楼
如果num2必须大于num1,则num2
String
,然后读取try
和Integer.parseInt()
,如果不知道't catch
是一个例外,那么它是一个数字,如果您这样做,请读一个新的数字,方法可能是将num2设置为Integer.MIN_VALUE并在示例中使用相同类型的逻辑。#3 楼
这应该起作用:import java.util.Scanner;
public class Test {
public static void main(String... args) throws Throwable {
Scanner kb = new Scanner(System.in);
int num1;
System.out.print("Enter number 1: ");
while (true)
try {
num1 = Integer.parseInt(kb.nextLine());
break;
} catch (NumberFormatException nfe) {
System.out.print("Try again: ");
}
int num2;
do {
System.out.print("Enter number 2: ");
while (true)
try {
num2 = Integer.parseInt(kb.nextLine());
break;
} catch (NumberFormatException nfe) {
System.out.print("Try again: ");
}
} while (num2 < num1);
}
}
#4 楼
尝试以下操作: public static void main(String[] args)
{
Pattern p = Pattern.compile("^\d+$");
Scanner kb = new Scanner(System.in);
int num1;
int num2 = 0;
String temp;
Matcher numberMatcher;
System.out.print("Enter number 1: ");
try
{
num1 = kb.nextInt();
}
catch (java.util.InputMismatchException e)
{
System.out.println("Invalid Input");
//
return;
}
while(num2<num1)
{
System.out.print("Enter number 2: ");
temp = kb.next();
numberMatcher = p.matcher(temp);
if (numberMatcher.matches())
{
num2 = Integer.parseInt(temp);
}
else
{
System.out.println("Invalid Number");
}
}
}
您也可以尝试将字符串解析为
int
,但通常人们会尽量避免引发异常。我所做的是定义了一个定义数字的正则表达式,
\d
表示数字。 +
符号表示必须有一个或多个数字。 \
前面的额外\d
是因为在Java中,\
是特殊字符,因此必须转义。#5 楼
我看到Character.isDigit非常适合需要,因为输入将只是一个符号。我们当然没有有关此kb对象的任何信息,但万一它是java.util.Scanner实例,我还建议使用java.io.InputStreamReader进行命令行输入。举个例子:
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
try {
reader.read();
}
catch(Exception e) {
e.printStackTrace();
}
reader.close();
#6 楼
您还可以将下一个标记作为字符串,将该字符串转换为char数组,并测试该数组中的每个字符是否为数字。我认为这是正确的,如果您不这样做的话不想处理异常。
评论
“ kb”是什么类型?通常,从stdin(System.in)读取时,您会为每个字符获得ascii / UTF8代码,这使您想要的检查非常容易。但这似乎隐藏在“ kb”引用后面的对象中。目前尚无人提供有效的代码!kb是否会成为新的Scanner(System.in)?
静态扫描仪kb =新扫描仪(System.in);