这里的基本问题..我会问,你请不与任何代码响应,因为这可能只会混淆我进一步(编程小白)开始。 我在寻找如何解决我有这个问题解释清楚。
我有一台扫描仪,从用户读取输入。 用户被提示以1〜150(仅限整数)之间进入一个int值。 我得到的值,如下所示:
Scanner scan = new Scanner(System.in);
int input = scan.nextInt();
并继续与我的程序,一切工作正常。
不幸的是,该代码是不完全防弹,因为任何输入不是一个整数可以打破它(字母,符号等)。
我怎样才能使代码更健壮,它会验证只有一个int被输入?
这是我希望的结果:
比方说输入是:
23 -> valid
fx -> display an error message, ask the user for input again (a while loop would do..)
7w -> error, again
3.7 -> error
$$ -> error
etc
Scanner.hasNextInt()返回true
如果下一个标记是一个数字,返回false
,否则。
在这个例子中,我称之为hasNextInt()。 如果返回true
,我走过去的,而并设定输入; 如果返回false
,那么我丢弃输入( scanner.next();
),并重复。
Scanner scan = new Scanner(System.in);
while(!scan.hasNextInt()) {
scan.next();
}
int input = scan.nextInt();
这里有一个简单的例子,有提示和评论。
Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer: "); // Initial prompt for input
// Repeat until next item is an integer
while (!scan.hasNextInt())
{
scan.next(); // Read and discard offending non-int input
System.out.print("Please enter an integer: "); // Re-prompt
}
// At this point in the code, the user has entered an integer
int input = scan.nextInt(); // Get the integer
// And now you can use the input variable.
使用scan.hasNextInt()
以确保下一个输入是int
。
刚刚获得“任何东西”,并对其进行分析:
Scanner scan = new Scanner(System.in);
Integer number = null;
while (number == null) {
try {
number = Integer.parseInt(scan.next());
} catch (NumberParseException e) {
System.out.println("bad input: " + input);
}
}
没有任何代码,只是在英语,我说有你有测试或看出来的两件事情。 第一输入是一个int,第二是,int是正确的范围内。
在伪代码方面,要做的第一件事就是确保它是一个int。 声明名为“输入”一个int,我会把一个try / catch块,在那里你尝试在用户输入一个int进行扫描,用parseInt函数()。 如果尝试部分出现故障,你知道这是不是一个int,并且可以返回一个错误信息。
那么,现在你知道“输入”是一个int,你可以测试它是否是150余小于1,如果是返回一个错误信息!
我写了保证如果输入数字而不是无效值的程序只能继续一个例子。 别担心,我将所需的解释。
该方案要求用户输入一个数字。 一个循环确保直到输入一个有效的数字处理将不下去了。 在此之前,我已经定义了一个变量“inputAccepted”有假的默认值。 如果他进入一个数字,变量“inputAccepted”设置为true,程序退出循环。 但是,如果他进入东西比别的号,一个异常就在此刻抛出,而变量“inputAccepted”设置为true,该行不会被执行。 相反,一个消息将被打印出来,告诉他输入无效用户。 由于“inputAccepted”不能设置为true,则循环将再次做同样的东西,直到字符串可以转换为数字。
你可以在这里测试程序。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean inputAccepted = false;
while (!inputAccepted) {
try {
System.out.print("Please enter a number: ");
Integer.valueOf(input.nextLine());
inputAccepted = true;
} catch (NumberFormatException e) {
System.out.println("Not a valid number.");
}
}
System.out.println("Thank you!");
}
}
公共类样品{
/**
* author CLRZ
*/
public static void main(String[] args) {
int a; // variable
Scanner in = new Scanner(System.in); // scans your input
System.out.println("Enter your number's choice:");
int sem1 = in.nextInt(); // reads next integer
if (sem1 == 1) // conditioned if your choice number is equal to 1
System.out.println("Hello World1"); // output wil be Hello World
int b;
System.out.println("Enter your number's choice:");
int sem2 = in.nextInt();
if (sem2 == 2)
System.out.println("Hello World2");
int c;
System.out.println("Enter your number's choice:");
int sem3 = in.nextInt();
if (sem3 == 3)
System.out.println("Hello World3");
}
}