提问人:Logan Serman 提问时间:1/23/2009 最后编辑:Keith PinsonLogan Serman 更新时间:3/25/2015 访问量:14404
通过扫描仪保证整数输入的更简单方法?
Easier way to guarantee integer input through Scanner?
问:
对于我正在编写的程序,我需要向用户询问一个介于 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
答:
4赞
Paul Tomblin
1/23/2009
#1
Scanner 做正则表达式,对吧?为什么不先检查它是否与“^[1-8]$”匹配?
3赞
gizmo
1/23/2009
#2
与简单地使用 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);
评论
0赞
Logan Serman
1/23/2009
如果您提供字符串,则会导致无限循环。
0赞
WolfmanDragon
1/23/2009
虽然我知道您的代码在语法上是正确的,但在一行上不带大括号的 if then 不是标准的。来自 Sun: 注意:if 语句始终使用大括号 {}。避免以下容易出错的形式:if (condition) 语句;避免!这省略了大括号 {}!
0赞
Michael Myers
1/23/2009
而且他也省略了 while() 之后的分号,但我不知何故设法理解了他的意思。:)
0赞
Joe Phillips
1/23/2009
我以为是剪断——这是孩子们放在脚踝上并在它转圈时跳过去的东西之一?
0赞
OscarRyz
1/23/2009
@Gizmo:我一生中听过数千次同样的推理。出于同样的原因,引入了许多错误。虽然这么一小段代码不应该被如此认真地对待是正确的,但它最终反映了你的做法。是好习惯的问题。
0赞
Joe Phillips
1/23/2009
#3
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 按钮。如果你只是使用,你可以在一条线上放两个 s,它会拉入一个,然后是另一个。inputScanner.nextInt()
int
0赞
Brandon DuRette
1/23/2009
#4
Apache Commons 是你的朋友。请参阅 NumberUtils.toInt(String, int)
评论
0赞
OscarRyz
1/23/2009
只为一个函数带来一个新库是否值得?: - /
0赞
kevan1881
9/9/2010
#5
示例代码:
int x;
Scanner in = new Scanner(System.in);
System.out.println("Enter integer value: ");
x = in.nextInt();
数组也可用于存储整数。
2赞
goalaleo
12/7/2012
#6
我不得不做一个图形界面计算器(仅适用于整数),问题是,那个 如果输入不是,则测试不允许抛出任何异常 整数。所以我不能使用
try { int x = Integer.parseInt(input)} catch (Exception e) {dosomethingelse}
因为 Java 程序通常将 JTextField 的输入视为字符串 我用了这个:
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
希望这对:)有所帮助
1赞
Jason Carlson
3/25/2015
#7
您可以尝试如下操作:
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();
}
}
评论