对于我正在编写的程序,我需要向用户询问1到8之间的整数。我尝试过多种(更干净)的方法,但没有一种方法可行,所以我留下了这个:
int x = 0;
while (x < 1 || x > 8)
{
System.out.print("Please enter integer (1-8): ");
try
{
x = Integer.parseInt(inputScanner.next());
}
catch(NumberFormatException e)
{
x = 0;
}
}
inputScanner
是扫描仪。当然有更好的方法吗?
答案 0 :(得分:4)
扫描仪做正则表达式,对吗?为什么不首先检查它是否匹配“^ [1-8] $”?
答案 1 :(得分:3)
与简单地使用next()方法相比,使用nextInt()已经有了改进。在此之前,您可以使用hasNextInt()来避免所有这些无用的异常。
导致类似这样的事情:
int x = 0;
do {
System.out.print("Please...");
if(scanner.hasNextInt()) x = scanner.nextInt();
else scanner.next();
} while (x < 1 || x > 8);
答案 2 :(得分:2)
我必须做一个图形界面计算器(仅适用于整数),问题是,那 如果输入不是,则测试不允许抛出任何异常 整数。所以我无法使用
try { int x = Integer.parseInt(input)} catch (Exception e) {dosomethingelse}
因为Java程序通常将JTextField的输入视为String 我用过这个:
if (input.matches("[1-9][0-9]*"){ // String.matches() returns boolean
goodforyou
} else {
dosomethingelse
}
// this checks if the input's (type String) character sequence matches
// the given parameter. The [1-9] means that the first char is a Digit
// between 1 and 9 (because the input should be an Integer can't be 0)
// the * after [0-9] means that after the first char there can be 0 - infinity
// characters between digits 0-9
希望这有助于:)
答案 3 :(得分:0)
String input;
int number;
while (inputScanner.hasNextLine())
{
input = inputScanner.nextLine();
if (input.equals("quit")) { System.exit(0); }
else
{
//If you don't want to put your code in here, make an event handler
//that gets called from this spot with the input passed in
try
{
number = Integer.parseInt(input);
if ((number < 1) || (number > 8))
{ System.out.print("Please choose 1-8: "); }
else { /* Do stuff */ }
}
catch (NumberFormatException e) { number = 0; }
}
}
我总是喜欢拉入完整的字符串,以确保用户按下了Enter按钮。如果您只使用inputScanner.nextInt()
,则可以将两个int
放在一行上,它会拉入一个,然后是另一个。
答案 4 :(得分:0)
Apache Commons是你的朋友。见NumberUtils.toInt(String, int)
答案 5 :(得分:0)
示例代码:
int x;
Scanner in = new Scanner(System.in);
System.out.println("Enter integer value: ");
x = in.nextInt();
数组也可用于存储整数。
答案 6 :(得分:0)
您可以尝试这样的事情:
Scanner cin = new Scanner(System.in);
int s = 0;
boolean v = false;
while(!v){
System.out.print("Input an integer >= 1: ");
try {
s = cin.nextInt();
if(s >= 1) v = true;
else System.out.println("Please input an integer value >= 1.");
}
catch(InputMismatchException e) {
System.out.println("Caught: InputMismatchException -- Please input an integer value >= 1. ");
cin.next();
}
}