如何优化do-while循环?

时间:2014-11-14 09:23:26

标签: java loops

只要某个条件适用,我想执行一个循环。最后,我想返回最后在循环中找到的值。

非现实世界的例子:

teststring = "        abcde";

String letter = null;
do {
    letter = reader.read(); //reads the teststring char by char
} while (letter.equals(" "));
return letter; //return "a"

这可以从编码的角度进行优化,例如将其从do-while循环转换为while循环吗?

5 个答案:

答案 0 :(得分:1)

如果您使用Java 1.7或1.8,则可以执行以下操作:

while((letter=reader.read()).equals(" ")){
}
return letter;

答案 1 :(得分:1)

如果您正在从Reader读取它会返回一个int char或-1,如果在输入结束时。

int ch;
while((ch = reader.read()) == ' ');
return ch;

注意:“”是一个字符串,''是一个字符。

答案 2 :(得分:1)

不确定什么更有效但你可以做类似的事情:

`return teststring.trim().charAt(0);

答案 3 :(得分:1)

do {
      ...
} while (<condition>);

我将解释你关于do / while vs的问题。

do只是一个标签。它对效率没有影响。底部的while实际上是if(条件)goto行#,其中line#是do。 “do”只是告诉编译器底部goto语句中您想要的数字的一种方式。

将while语句置于顶部实际上效率较低,因为这意味着必须在第一次迭代时评估条件。也许你的读者确实需要在第一次迭代时检查,然后它应该是一个while语句,但这需要更多的工作,你知道吗?

第二个甚至将它转换为只有一个while语句,仍然在底部放置一个无条件goto,顶部有一个条件goto,所以即使看起来代码较少,也可能更多。

答案 4 :(得分:0)

我认为使用String.toCharArray()For Each loop之类的

会更容易
String teststring = "        abcde";
for (char ch : teststring.toCharArray()) {
    if (ch != ' ') return ch; // <-- 'a'
}
throw new ParseException("Whitespace only");

但是,您可以使用StringReader并使用char(原始版),所以我认为您已经要求

String teststring = "        abcde";
StringReader reader = new StringReader(teststring);
try {
    int letter;
    do {
        letter = reader.read();
    } while (letter == ' ');
    return ((char) letter);
} catch (IOException e) {
    e.printStackTrace();
}
throw new ParseException("Whitespace only");

或如果找不到该字符,则返回默认值。