2015-08-21 209 views
1

以下是一些要求用戶輸入整數的代碼。do while while循環中的變量

public int getValidInput() { 
    Scanner user_input = new Scanner(System.in); 

    do { 
     System.out.println("Enter an integer >=1 and <=10: "); 
     int number = user_input.nextInt(); 

    } while (number > 10 || number < 0); 

    return number; 
} 

雖然當我在do命令之外初始化數字,即將其設置爲int數字,但所示的代碼不起作用;然後在do循環中設置number = user_input.nextInt();它。它爲什麼在一種情況下工作,而不是另一種?

+0

由於'variable'定義的範圍。由於它是在'do'語句中定義的,所以'while'不可用' –

+1

這甚至不能編譯?! – Smutje

+2

'number> 10 && number <0'永遠不會成真,用'||'代替。 –

回答

6

因爲在Java中,變量的作用域被定義爲聲明它們的塊。在你的例子中,int number =do...while塊,所以變量只存在於該塊內。

通過將該聲明移出該塊,將該聲明移動到該方法的塊中,該變量就存在於該方法的整個塊(包括嵌套塊)中。

+0

@ TJ的日子已經開始.. :)每當我來到英國,如果我得到改變,我想見你一次.. :) –

+1

@GuruprasadRao你可以直接評論這裏的建議。 ;) –

+1

@GuruprasadRao :-)肯定會令人失望。 ;-) –

0

變量的範圍限制爲{}。在你無法訪問的大括號外面。當你初始化它時,隨着範圍的增加,它會在兩者之間進行訪問。

3

你的問題是你在循環中定義了number。變量的作用範圍是Java,所以在循環中聲明的變量或者在這些循環或if語句之外不能訪問的語句。您可以修復你的代碼,只需通過移動聲明,如下圖所示:

public int getValidInput() { 
    Scanner user_input = new Scanner(System.in); 
    int number; 
    do { 
     System.out.println("Enter an integer >=1 and <=10: "); 
     number = user_input.nextInt(); 
    } while (number>10 || number < 0); 

    return number; 
} 
+1

用||更新條件 – Alvins

+0

@Alvins是的,我已經忘記了這一點,謝謝! – James

0

花括號中的DO-而{}開闢所謂的範圍(他們總是這樣,閹羊的方法或循環或IFS )。範圍內的任何聲明僅在您處於該範圍內時纔可見,並且在範圍內打開的任何內部範圍內也是可見的。

while的條件是大括號,所以它不會看到任何變量中聲明他們。如果將int number;放在do之前,則它與while條件處於相同的作用域級別,因此它與循環內部獲得的值一起對條件中的表達式可見。

1

條件用於從身體外部輸入身體,因此決定條件真值的變量必須存在於身體之前。 而且,由於do-while循環的主體塊是要執行的代碼,因此決定執行它的代碼必須與其自身不同。