Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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 “替代方案”;而";环_Java - Fatal编程技术网

Java “替代方案”;而";环

Java “替代方案”;而";环,java,Java,我正在寻找一个更好的替代下面的代码。假设一些常用的编程语言(C/C++、java等): (一) 不好,因为使用了一个循环,一个中断可能会在某些代码的中间丢失。 (二) 不太好,因为对“foo”的赋值是重复的。在本例中相同: 2b) (三) “转到”到一个循环的中间 (四) 条件是重复的 奇怪的是,如此普通的东西没有很好的实现。通常是通过以下方式实现的: Foo foo; while ((foo = getSmthUgly()) != null) { //... } 赋值运算符=的结果只

我正在寻找一个更好的替代下面的代码。假设一些常用的编程语言(C/C++、java等):

(一)

不好,因为使用了一个循环,一个中断可能会在某些代码的中间丢失。

(二)

不太好,因为对“foo”的赋值是重复的。在本例中相同:

2b)

(三)

“转到”到一个循环的中间

(四)

条件是重复的


奇怪的是,如此普通的东西没有很好的实现。

通常是通过以下方式实现的:

Foo foo;
while ((foo = getSmthUgly()) != null) {
    //...
}

赋值运算符
=
的结果只是赋值,所以它也可以在表达式中使用。将任何丑陋的东西放入单独的方法中。

通常通过以下方式完成:

Foo foo;
while ((foo = getSmthUgly()) != null) {
    //...
}

赋值运算符
=
的结果只是赋值,所以它也可以在表达式中使用。任何丑陋的东西都放在单独的方法中。

类似于Sasha的解决方案,除了我赞成使用
for
来限制变量的范围之外。例如,从BufferedReader读取行时

try (BufferedReader br = new BufferedReader(new FileReader(filename)) {
    for(String line; (line = br.readLine()) != null; ) {
        doSomething(line);
    }
    // line is out of scope here.
}

与Sasha的解决方案类似,只是我倾向于使用
for
来限制变量的范围。例如,从BufferedReader读取行时

try (BufferedReader br = new BufferedReader(new FileReader(filename)) {
    for(String line; (line = br.readLine()) != null; ) {
        doSomething(line);
    }
    // line is out of scope here.
}


选项4有什么问题?选项1有什么问题?@biziclop:condition“foo!=null”必须重复。如果条件更复杂,或者是对另一个函数的调用,这可能是一个问题。@pasabaporaqui由于两个条件不同,所以它不会重复。一个是处理的条件,另一个是留在循环中的条件。在您的案例中,这两个可能相似只是巧合,从逻辑上讲,它们是两个独立的条件。@SLaks:假设“foo”的初始化需要不止一行的内容(例如,初始化Java PrinterWriter BufferedStram时,通常使用多个“new”语句)。在这种情况下,断点在源的中间丢失。选项4有什么不对?选项1有什么不对?@ BIZICLOP:条件“FoO!= NULL”必须复制。如果条件更复杂,或者是对另一个函数的调用,这可能是一个问题。@pasabaporaqui由于两个条件不同,所以它不会重复。一个是处理的条件,另一个是留在循环中的条件。在您的案例中,这两个可能相似只是巧合,从逻辑上讲,它们是两个独立的条件。@SLaks:假设“foo”的初始化需要不止一行的内容(例如,初始化Java PrinterWriter BufferedStram时,通常使用多个“new”语句)。在这种情况下,Bebug在源代码中间丢失。在C/C++中,我认为java中不可能。@ PasabPaRaQui绝对是可能的。@ PasabPaRaQui为什么java中不可能这样做。只要getSmthUgly不太难看,这可能是最好的解决方案。好的,这可能是最好的,当init to“foo”需要多个语句时,会出现另一个问题。@pasabaporaqui然后可以使用函数,如C/C++中的
getSmthUgly()
True,我认为在Java中是不可能的。@pasabaporaqui绝对可能。@pasabaporaqui为什么在Java中不可能呢。只要getSmthUgly不太难看,这可能是最好的解决方案。好的,这可能是最好的,当init to“foo”需要多个语句时会出现另一个问题。@pasabaporaqui然后您可以使用函数,如
getSmthUgly()
很高兴知道“for”的第一部分只能用于声明局部变量,不带init。很高兴知道“for”的第一部分只能用于声明局部变量,而不带init。
do {
  foo = ... something ugly ...
  if( foo != null ) {
     ... some code 
  }
} while ( foo != null )
Foo foo;
while ((foo = getSmthUgly()) != null) {
    //...
}
try (BufferedReader br = new BufferedReader(new FileReader(filename)) {
    for(String line; (line = br.readLine()) != null; ) {
        doSomething(line);
    }
    // line is out of scope here.
}