2017-10-19 162 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