Do-while循环不会逃脱 - Java

时间:2012-09-16 02:40:34

标签: java loops do-while

do-while循环是否在增加之前或之后检查一个值?我似乎无法使这个do-while循环转义,并且无法确定这是否是我正在犯的错误。这个循环的要点是从用户那里获取输入,当它们点击'X'时,我希望循环结束。我使用了错误的循环类型,或者说错误的陈述?

int i = 0, 
inputCount = 0;
char letter = 'a';
String[] coefficient = new String[MAX_LENGTH];  
do{ 
    System.out.print("What is " + letter +"? ");
    coefficient[i] = keyboard.nextLine();
    i++;
    letter++;
    inputCount++;           
}while(coefficient[i] != "X");

3 个答案:

答案 0 :(得分:4)

不要使用==比较字符串。请改用equals(...)equalsIgnoreCase(...)方法。理解==检查两个对象是否相同而不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,并且这才是最重要的。而不是

if (fu == "bar") {
  // do something
}

做,

if ("bar".equals(fu)) {
  // do something
}

,或者

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}  

特别是在你的情况下,我会改变

} while(coefficient[i] != "X");

类似于:

} while(!"X".equalsIgnoreCase(coefficient[i]));

你的代码中还有另一个问题,就是你要测试放入coefficient[i]的用户输入,但随后你迅速增加i变量,使coefficient[i]不再引用输入。

所以也许测试应该是:

} while(!"X".equalsIgnoreCase(coefficient[i - 1]));

答案 1 :(得分:1)

这里有两个问题。首先,您不应该使用逻辑运算符比较字符串。请改用.equals。 例如:

coefficient[i].equals("X");

其次,在检查while条件之前,您正在递增数组索引计数器。所以你实际上需要从中减去一个以检查最近输入的String是否为X.

看看使用它会使它运转起来:

coefficient[i-1].equals("X");

答案 2 :(得分:1)

您在icoefficient[i] = keyboard.nextLine();之间递增while(coefficient[i] != "X");,因此在while check系数[i]为null时,也可以使用.equals来比较字符串。

int i = 0, 
inputCount = 0;
char letter = 'a';
String[] coefficient = new String[MAX_LENGTH];  
do{ 
    System.out.print("What is " + letter +"? ");
    coefficient[i] = keyboard.nextLine();
    i++;
    letter++;
    inputCount++;           
}while(!coefficient[i-1].equals("X"));