2015-05-25 4 views
-7

У меня возникли проблемы с while-loop, так как оператор if предназначен для проверки, является ли кнопка пустой, если не повторяется. Однако, если весь оператор if находится в while-loop, он показывает около 4 кнопок после запуска кода в первый раз.В то время как цикл работает некорректно

case HINT: 
    Random random = new Random(); 
    int size = SizeOfPuzzle.currentRows; 
    int randomNumber1 = random.nextInt(size); 
    int randomNumber2 = random.nextInt(size); 
    if (puzzlePanel.arrayOfButtons[randomNumber1][randomNumber2].getText().isEmpty()) { 
     puzzlePanel.arrayOfButtons[randomNumber1][randomNumber2].setText(puzzle.getSingleLetter(randomNumber1, randomNumber2) + ""); 
    }else { 
     boolean finished = true; 
     while (!finished) { 
      randomNumber1 = random.nextInt(size); 
      randomNumber2 = random.nextInt(size); 
      if (puzzlePanel.arrayOfButtons[randomNumber1][randomNumber2].getText().isEmpty()) { 
       puzzlePanel.arrayOfButtons[randomNumber1][randomNumber2].setText(puzzle.getSingleLetter(randomNumber1, randomNumber2) + ""); 
       break; 
      } 

     } 
    } 
break; 
+1

И что же вы вопрос или проблема? Вы должны добавить ясность к сообщению. –

+1

Одна строка перед 'while (! Finished)' вы устанавливаете 'finished' в' true', условие не будет оцениваться как 'true', так как'! True' является 'false'. – Maroun

+1

Пожалуйста, прочитайте: [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). – honk

ответ

0

Вы должны инициализировать finished к false, если вы хотите, чтобы ввести время, и после того, когда работа выполняется набор finished для true, чтобы выйти из цикла

boolean finished = false; 
while (!finished) { 
//  ↑ ↑ ↑ ↑ ↑ →→→→→→ this means loop while finished == false 
    randomNumber1 = random.nextInt(size); 
    randomNumber2 = random.nextInt(size); 
    if (puzzlePanel.arrayOfButtons[randomNumber1][randomNumber2].getText().isEmpty()) { 
     puzzlePanel.arrayOfButtons[randomNumber1][randomNumber2].setText(puzzle.getSingleLetter(randomNumber1, randomNumber2) + ""); 
     finished = true; 
    }  
} 
+1

Благодарим вас за разъяснения. Выявлена ​​основная проблема: final = true; сразу после начала цикла while. Глупая маленькая ошибка. – Jackson

Смежные вопросы