2017-10-19 135 views
0

我遇到了while循環的問題。它正在編譯,但它不會在while循環中輸入,並跳到下一個條件。Java程序跳過while循環

public class Tr { 
    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
     String name = ""; 

     while(name.length() > 1) {  
      System.out.print("Enter name : "); 
      name = in.nextLine(); 
      if(name.length() > 1) { 
       System.out.println("It needs to be greater than 1"); 
      } 
     } 
    } 
} 
+0

u可以使用而(name.length()== 0) \t \t { \t \t是System.out.print( 「輸入名稱:」); \t \t name = in.nextLine(); \t \t如果(name.length()> 1) \t \t { \t \t的System.out.println( 「它需要大於1」); \t \t} \t \t} – Balasubramanian

+0

如果我不進入它,它會打印錯誤我: 變量名可能沒有初始化 – ZeroOne

回答

0

你的變量name被初始化爲name = "";,所以​​。

你的while條件檢查長度是否大於1,而不是它跳過。

+0

是的,但我需要對它進行初始化,否則將無法正常工作。 Sry,我是新來編程,所以我不知道很多。 – ZeroOne

+0

我知道你這樣做,但你的while循環與'while(false)'幾乎相同。在你的時候改變'>',如果條件改爲'<'。 –

+0

它的工作原理,感謝您的幫助:) – ZeroOne

2

這是因爲name的長度爲0,因此控件永遠不會進入while。您需要使用do..while循環,使其至少執行一次,例如:

do{  
    System.out.print("Enter name : "); 
    name = in.nextLine(); 
    if(name.length() <= 1){ 
     System.out.println("It needs to be greater than 1"); 
    } 
}while(name.length() <= 1); 
+1

可能需要將這些'>'變成'<',但使用'do ... while'是正確的答案。 – OldCurmudgeon

+0

@OldCurmudgeon更新了答案,謝謝你的輸入 –

+0

@AxelH這樣做:) –

0

因爲name.length()總是返回0,這樣你的情況不會永遠是正確的。

2

看來你想要的邏輯是提示用戶輸入一個名字,並保持提示,直到輸入長度大於1的名字。一個do循環似乎合身這裏:

Scanner in = new Scanner(System.in); 
String name; 

do { 
    System.out.print("Enter name with length > 1: "); 
    name = in.nextLine(); 
    // you can print an optional feedback message 
    if (name.length() <= 1) { 
     System.out.println("length needs to be greater than 1"); 
    } 
} while (name.length() <= 1); 
+0

不,它仍然跳過它,如果你按下輸入。我需要找到用戶輸入的名稱是否小於1,它會向他發送錯誤消息,他需要重新輸入名稱。 – ZeroOne

0

(name.length()< 1) 在我們的同時,如果條件改變這種狀況。

您已經定義了一個名爲name的空字符串,while循環條件的條件檢查名稱長度是否大於1。

+0

是的,但我需要初始化它或它不會工作。 Sry,我是新來編程,所以我不知道很多。我只需要用戶不要輸入比1更小的名字 – ZeroOne