Почему это завершается до получения значения? (Джава) - PullRequest
2 голосов
/ 27 марта 2010

Вот соответствующий фрагмент кода.

public static Territory[] assignTerri (Territory[] board, String[] colors) 
{ 
    for (int i = 0; i<board.length; i++) 
    { 
        // so a problem is that Territory.translate is void fix this. 
        System.out.print ("What team controls ") ; Territory.translate (i) ; System.out.println (" ?") ; 

        boolean a = false ;
        while (a = false) 
        {
            String s = getIns () ;
            if ((checkColor (s, colors)))
            {
                board[i].team = (returnIndex (s, colors)) ;
                a =true ; 
            }
            else 
                System.out.println ("error try again") ; 
        }       
        System.out.print ("How many unites are on ") ; Territory.translate (i) ; System.out.println (" ?") ; 
        int n = getInt () ; 
        board[i].population = n ; 
    }
    return board ; 

}

В качестве дополнительной информации, checkColor просто проверяет, является ли первый аргумент, строка, строкой в ​​одном из индексов второго аргумента, массива.

Мне кажется, что когда while метод получает строку с клавиатуры, то только в том случае, если эта строка проверена, является истиной и while разрешено завершать.

Вывод, который я получаю, таков:

What team controls Alaska ?
How many unites are on Alaska ?

(в конце есть пробел для ввода)

Казалось бы, это предполагает, что while завершается до того, как ввод будет введен, поскольку первая строка текста находится внутри while, а вторая строка текста идет после него.

Почему это происходит?

Ответы [ 4 ]

11 голосов
/ 27 марта 2010

Потому что вы спутали = с ==?

6 голосов
/ 27 марта 2010

Потому что вам нужно использовать

while (a == false)

или

while (!a)

вместо.

('=' - оператор присваивания. '==' - оператор сравнения. В этом случае необходимо использовать оператор сравнения.)

2 голосов
/ 27 марта 2010

Вам нужно использовать == вместо =, чтобы сделать сравнение "равно".

Либо

while (a == false)

или

while (!a)

будет работать. ! средство не а.

1 голос
/ 27 марта 2010

Несмотря на то, что проблема решена предыдущими ответами, я бы порекомендовал переписать условие перерыва в качестве явного перерыва.

while (true) 
{
    String s = getIns () ;
    if (checkColor(s, colors))
    {
        board[i].team = returnIndex(s, colors);
        break; 
    }
    System.out.println("error try again"); 
}

Или напишите код более похожий на то, как вы бы описали его на английском языке. «Попросите новый ответ, пока не будете удовлетворены».

String s = getIns();
while (!checkColor(s, colors))
{
    // Ask for a new answer until satisfied
    System.out.println ("error try again");
    s = getIns();
}
board[i].team = returnIndex(s, colors);

Смысл кода более понятен, imho.

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