Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何优化while循环?_Java_Loops - Fatal编程技术网

Java 如何优化while循环?

Java 如何优化while循环?,java,loops,Java,Loops,只要某个条件适用,我就想执行一个循环。最后,我想返回上一次在循环中找到的值 非现实世界示例: teststring = " abcde"; String letter = null; do { letter = reader.read(); //reads the teststring char by char } while (letter.equals(" ")); return letter; //return "a" 是否可以从编码的角度对其进行优化,例如将其从

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

非现实世界示例:

teststring = "        abcde";

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

是否可以从编码的角度对其进行优化,例如将其从do while循环转换为just while循环?

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

while((letter=reader.read()).equals(" ")){
}
return letter;
如果您从中读取,它将返回一个int,该int是输入端的
char
或-1

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

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

我认为它更容易使用和类似的字符


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

不确定什么更有效,但可以执行以下操作:

`return teststring.trim().charAt(0);
do{
...
}while();
我将解释你关于独处的问题

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

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


第二,即使将其转换为一个while语句,仍然会在底部放置一个无条件的goto,在顶部放置一个有条件的goto,因此尽管看起来代码更少,它可能会更有效。

是什么让你认为这是无效的?为什么while循环比do-while循环更有效?这就是问题:是不是?如果没有,威尔,那很好。使用探查器,找出影响性能的因素。如果被要求下注,我猜将是“char by char”partNo,这将返回第一个“”,嵌套的
return
表示这将只循环一次。这将返回它遇到的第一个空白。编辑后,这将循环到a,然后while循环完成,函数返回a。它可以是另一个读卡器实现,帖子没有指定。如果第一种情况下只剩下空格,第二种情况下出现编译错误,那么这将是一个无限循环。@PeterLawrey我改变了顺序,我想我已经解决了你提到的问题。什么编译错误?在for循环之后没有返回任何内容。因为我的响应不依赖于循环中OP的代码是否有效,所以我将其分解。但是现在说reader()返回什么还为时过早,因为他没有包括它的类型(你假设它是java.io.reader),并且它需要假设他的代码在一个关于提高代码效率的问题上实际上不起作用。@PeterLawrey我可能应该在
trim()之后包括一个
StringIndexOutOfBoundsException
因为它可以返回空字符串,在这种情况下,
charAt(0)
将失败。但你明白了。
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");
`return teststring.trim().charAt(0);
do {
      ...
} while (<condition>);