我创建了一个方法来查看用户输入的值是否为int
,并且介于liminf
和limsup
之间。它返回值,以便我可以将其用作菜单选项。
字符串message
告诉用户输入内容,error
告诉用户使用limunf
和limsup
之间的数字。
我的问题是,例如,如果用户输入数字10且liminf
为7且limsup
e 9,则其运行方式与数字10之间的limsup
和liminf
。
public static int readInput(String message, String error, int liminf, int limsup, Scanner rd){
int option = 0;
do {
option = rd.nextInt();
System.out.println(message);
while (!rd.hasNextInt()) {
System.out.println("Please enter the option");
rd.nextLine();
}
option = rd.nextInt();
canal.nextLine();
} while (option > limsup || option < liminf);
return option;
}
答案 0 :(得分:1)
更改while
中的条件,如下所示:
while (option <= limsup && option >= liminf);
根据您当前的情况,当您有option = 10
和limsup = 9
时,您的条件option > limsup
将评估为true
并且正在使用||
(或opeartor)即使第二个条件评估为false
,整个表达式也会计算为true
。
答案 1 :(得分:1)
当您检查输入时,您需要做两件事:
要检查值是否为整数,可以使用以下两种方法之一。在hasNextInt
上使用Scanner
,或使用Integer.parseInt
并抓住NumberFormatExceptions
。你在评论中说你不能使用第二个,所以我们将使用第一个。
在致电hasNextInt
之前,您始终需要致电nextInt
,以便您可以这样做:
int option = 0;
System.out.println(message);
System.out.println("Please enter the option");
while (!rd.hasNextInt()) {
rd.nextLine(); // Clears the invalid input
System.out.println("Please enter the option");
}
option = rd.nextInt();
这将循环直到用户输入int
,然后它将获得int
。请注意,在调用hasNextInt
之前不调用nextInt
会导致错误,如果您尝试输入非数字,则会在当前代码中发生错误。
接下来,您需要进行边界检查。如果我没有弄错的话,您希望它在limsup
和liminf
之间,limsup > liminf
。我们需要确定允许这种情况的条件。
之间是通过使用大于较小的数字而小于较大的数字来实现的。在这种情况下,那是option >= liminf && option <= limsup
。我们想在不时循环,所以我们可以将整个事情包装在!()
中:
int option = 0;
do {
System.out.println(message);
System.out.println("Please enter the option");
while (!rd.hasNextInt()) {
rd.nextLine(); // Clears the invalid input
System.out.println("Please enter the option");
}
option = rd.nextInt();
} while (!(option >= liminf && option <= limsup));
return option;
我会让你弄清楚如何/在哪里打印错误信息,但这应该让你开始。
值得注意的是:
hasNextInt
,nextInt
,nextLine
,Scanner rd = new Scanner(System.in);
等将等待用户输入
nextLine
清除旧输入并强制用户输入新输入!()
答案 2 :(得分:0)
如果输入是整数,您可以检查输入是否为Integer.parseInt(input);
,如: -
try {
String s = "a";
int i = Integer.parseInt(s);
return true;
}
catch(NumberFormatException nfe){return false;}
并改变条件,如: -
while (option <= limsup && option >= liminf);
答案 3 :(得分:0)
以下是测试字符串是否为整数的方法:
private static boolean isInteger( String s ){
try{
Integer.parseInt(s);
return true;
catch( Exception e ){
return false;
}
}
但是,由于你使用的是nextInt()函数,所以这不是必需的,因为你只会以这种方式获得整数输入。
答案 4 :(得分:0)
while ((option > limsup) || (option < liminf))
答案 5 :(得分:0)
我相信,你的readLine
正在使它忽略下一个令牌(10)本身,因为它在读取整个行时hasNextInt
检查单个令牌。尝试简单如下(使用next
并删除额外的rd.nextInt()
作为循环中的第一个语句):
do {
System.out.println(message);
while (!rd.hasNextInt()) {
System.out.println("Please enter the option");
rd.next();
}
//now the next token is int
option = rd.nextInt();
//flush the new line if any
rd.nextLine();
} while (option > limsup || option < liminf);
答案 6 :(得分:0)
你的签到时间错了(选项&gt; limsup ||选项&lt; liminf) 看看选项&gt; limsup,10比9大,这就是你遇到这个问题的原因