2012-06-17 174 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的答案進行比較。