2012-06-17 141 views
1

为了让我的程序更简化(无需到处尝试并捕捉),我试图创建一个用于获取数据的独立方法。我也有一个用于双打和弦乐。 由于某些原因,当我尝试使用此方法时,它完全被忽略,并且像评论一样传递。有什么我做错了吗?扫描仪不停止阅读输入

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; 

您所创建的扫描对象,但无处在的方法,使用它,你实际上是。

接下来的几行,

if (variable >= 0 && valid){ 
     } 

的这些条件都得到满足。因此,在括号内没有任何代码被执行。所以从那里,它只是返回变量的值,即0。

因此,您需要实际使用Scanner类来获取整数。我相信,虽然我不知道,对于该方法是

Scanner.nextInt(); 

编辑:从JavaDoc中http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

您可以简单地使用

Scanner sc = new Scanner(System.in); 
int i = sc.nextInt(); 

来读取一个整数扫描器。

+0

对不起, 我的尝试和抓住通常很难遵循,所以我试图保持在这个更简单的方法。 – kryyn

+0

@ kryyn我不明白你为什么使用try,catch。也许你的问题没有得到足够的解释或什么。 – Austin

0

您的变量variable分配为0,而valid变量分配为true。因此,while (!valid || variable < 0)表达式将始终评估为false,并且do-while循环只会执行一次(不会创建扫描程序)。

我想你想在检查变量variable之前阅读用户输入,所以你可能会喜欢创建扫描仪并在执行if (variable >= 0 && valid)检查前阅读输入。

请注意,您可以跳过valid变量,并使用variable =sc.nextInt();,与@ Austin的答案进行比较。