Инициализация переменной в выражении while - не утверждение - PullRequest
1 голос
/ 14 января 2012

В выражении цикла while возможно ли инициализировать переменную, а затем использовать ее как часть выражения?

Возможно, в коде это проще:

while (int a = someMethod(), a<b)

ItМожно было бы просто добавить другой метод, и поэтому необходимо следующее:

private boolean whileLoopTest() {
    int a = someMethod();
    return a<b;
}

public void originalMethod() {
    while (whileLoopTest()) {
        //...

, но это не выглядит аккуратно.

РЕДАКТИРОВАТЬ Я также не 'Я не хочу напрямую сравнивать метод с моей переменной, так как он сравнивается с несколькими переменными, и поэтому, если это будет длинный, нечитаемый беспорядок.Лучшим примером того, что я хочу, было бы:

while (int a = SomeClass.someStaticMethod(), -1<a && a<b)

Это не так в моем случае, но это был бы столь же правильный вопрос, если бы someStaticMethod() потребовалось много времени, чтобы вернуться - я бы только хотелпозвони один раз.Я довольно новичок в StackOverflow, поэтому я не уверен, что мне следует делать в других ситуациях, где это применимо.

Ответы [ 3 ]

2 голосов
/ 14 января 2012
int a;
while((a = someMethod()) < b){
    //do something
}

Обычно это используется для чтения из файла:

BufferedReader fileIn = ...
String line;
while((line = fileIn.readLine()) != null){
    //do something
}
fileIn.close();

/ edit
Вы можете сделать это для своего нового сценария:

int a;
while(-1 < (a = SomeClass.staticMethod()) && a < b) {
    //do something
}

Один разлевая часть оператора && выполняется, возвращаемое значение SomeClass.staticMethod() сохраняется в a, который переносит правую часть оператора.

0 голосов
/ 14 января 2012

Почему бы просто , а не присвоить значение "a", если вы все равно его не используете? while (someMethod ()

0 голосов
/ 14 января 2012

Вы можете использовать функцию напрямую, не используя локальную переменную, подобную этой:

while ( someMethod() < b) { /* ... */}

Это, если ваш метод возвращает заданное значение.(Если вы преобразуете его в локальную переменную, он должен)

РЕДАКТИРОВАТЬ: Для вашего второго вопроса.Ваша проблема понятна, но если вы присваиваете значение этих методов локальной переменной внутри во время логического выражения цикла, в каждом цикле, где «Пока» проверяет выражение, вы присваиваете возвращаемое значение метода локальной переменнойЭто означает, что вы вызываете этот метод на каждой итерации.Это ничего не меняет с моего первого ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...