为了使我的程序更加简化(没有尝试并且无处不在),我尝试创建一个单独的方法来获取数据。我有一个双打和弦乐。 出于某种原因,当我尝试使用此方法时,它完全被忽略,并像注释一样传递。有什么我做错了吗?
public int inputint(){
Scanner sc = new Scanner (System.in);
int variable = 0;
boolean valid = true;
do{
try{
if (variable >= 0 && valid){
}
else if(valid){
System.out.print("Please enter positive values only: ");
}
valid = true;
}
catch (InputMismatchException e){
System.out.print("Please enter numerical values only: ");
sc = new Scanner(System.in);
valid = false;
}
}while (!valid || variable < 0);
return variable;
}
答案 0 :(得分:2)
首先,你的代码非常难以理解。 (或者我可能只是我)
但如果你看一下你的代码
Scanner sc = new Scanner (System.in);
int variable = 0;
boolean valid = true;
您正在创建Scanner对象,但该方法中没有任何地方您实际使用它。
接下来的几行,
if (variable >= 0 && valid){
}
满足这两个条件。因此括号中没有任何内容,不会执行任何代码。所以从那里,它只返回变量的值,即0。
因此,您需要实际使用Scanner类来获取整数。我相信,虽然我不确定,但方法是
Scanner.nextInt();
编辑:来自JavaDocs http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html
您只需使用
即可Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
从扫描仪中读取整数。
答案 1 :(得分:0)
您的变量variable
已分配0
,valid
变量已分配true
。因此,while (!valid || variable < 0)
表达式将始终计算为false
,并且执行循环将仅执行一次(不会创建扫描程序)。
我想你想在检查变量variable
之前阅读用户输入,所以你可能想要在进行if (variable >= 0 && valid)
检查之前创建扫描器并阅读输入。
旁注,您可以跳过valid
变量并使用variable =
sc.nextInt() ;
,与@ Austin的答案进行比较。