我正在尝试创建一个程序,我使用getInt方法确保用户输入正数。到目前为止我有这个
public class Binary {
public static void main(String [ ] args) {
Scanner CONSOLE = new Scanner(System.in);
int decimal=getInt(CONSOLE, "Enter a positive integer: ");
}
public static int getInt(Scanner CONSOLE, String prompt) {
System.out.print(prompt);
while (!CONSOLE.hasNextInt()) {
CONSOLE.next();
System.out.println("Not an integer; try again.");
System.out.println(prompt);
}
int posInt=CONSOLE.nextInt();
while (posInt <= 0) {
System.out.println("Not a positive integer; try again.");
CONSOLE.next();
System.out.println(prompt);
}
return CONSOLE.nextInt();
}
}
出现问题,当用户输入正数时,它仍然忽略输入并要求用户再次输入正整数。我想我只是没有正确退出循环,但我不确定如何。
答案 0 :(得分:2)
您的问题是return CONSOLE.nextInt();
在您的方法结束时,您正在呼叫CONSOLE.nextInt()
,再次请求输入。
返回posInt
,你就没事了。
祝你好运,HTH
答案 1 :(得分:0)
像其他人一样,你可以回复posInt
而你应该没事
但我对您的getInt
方法有一些建议:
public static int getInt(Scanner CONSOLE, String prompt) {
//initialize vars
boolean valid = false;
int posInt = 0;
//while the input is not valid, loop over the evaluation
while(!valid){
System.out.print(prompt);
if (!CONSOLE.hasNextInt()) {
CONSOLE.next();
System.out.println("Not an integer; try again.");
//"continue" stops the loop here and starts it from the beginning
continue;
}
posInt=CONSOLE.nextInt();
if (posInt > 0) {
//valid = true will get us out of the loop
valid = true;
}else {
System.out.println("Not a positive integer; try again.");
}
}
return posInt;
}
如果之前的输入无效,此代码将从头开始重新评估输入
在您的代码中,如果输入负数,则会提示您重新输入数字
但由于您已经在while (posInt <= 0)
循环中,因此如果您确实输入了有效输入,则不会重新检查。
我提供的代码从头开始重新评估下一个输入,直到找到有效。