2014-10-01 5 views
-2

Мне пока не удалось найти что-то, что связано с этим. Я слышал, что окружающая большинство вашей программы в цикле while, как это делает программу неэффективной, есть ли лучший способ получить тот же эффект?Заменить while (1 == 1) loop в Java

while (1 == 1) { 
     //User Input 
     System.out.println("Do you wish to roll? (Y/N)"); 
     if (kb.hasNext()) { 
      userContinue = kb.next(); 
     } 
     if (userContinue.equalsIgnoreCase("n")) { 
      System.exit(0); 
     } 
     //Calculations 
     score = 0; 
     while (userContinue.equalsIgnoreCase("Y")) { 
      rollResult = user.rollTwoDie(); 
      score = rollResult + score; 
      if (score > 21) { 
       System.out.println("You loose for going over 21."); 
       System.out.println("Your final score was: " + score); 
       score = 0; 
       System.out.println("Play again? (Y/N)"); 
       if (kb.hasNext()) { 
        userContinue = kb.next(); 
       } 
       if (userContinue.equalsIgnoreCase("n")) { 
        System.exit(0); 
       } 
      } 
      else if (score <= 21) { 
       System.out.println("Your score is: " + score); 
       System.out.println("Roll again? (Y/N)"); 
       if (kb.hasNext()) { 
        userContinue = kb.next(); 
       } 
      } 
     } 
     if (userContinue.equalsIgnoreCase("N")) { 
      while (computerScore <= score && computerScore < max) { 
       computerResult = computer.rollTwoDie(); 
       computerScore = computerResult + computerScore; 
      } 
      userContinue = computer.checkComputerScore(computerScore, score); 
     } 
    } 
+4

'while (true)' или 'for (;;)'. В этом нет ничего неправильного. –

+5

«Я слышал, что окружающая большая часть вашей программы в цикле while, как это делает программу неэффективной ...» '- пожалуйста, покажите нам ссылку для этого, поскольку я никогда не слышал ничего подобного раньше. Цикл while не имеет ничего общего с эффективностью. –

+1

'while (1 == 1)' очень странно. 'while (true)' намного более нормальный. Помимо этого, если вам нужен бесконечный цикл, тогда это то, что вам нужно. Вы действительно не должны называть 'System.exit', просто используйте' break'. –

ответ

1

Это не обязательно неэффективно. Он будет работать бесконечно. Если вы этого хотите, тогда это не обязательно зло.

Одна вещь, которую вы можете рассмотреть, это добавление стоп-буля. Таким образом, вы можете попросить пользователя, хотят ли они выйти, и установите для переменной значение true/false.

boolean stop = false; 
while(stop == false) { 
    //... 
} 

Кроме того, стилистический я люблю делать бесконечен, а петля, как это:

while(true) { 
    //... 
} 

Вместо того, чтобы использовать "1 == 1"

+0

Всякий раз, когда я спрашиваю игрока, хочет ли он/она выйти, я просто использовал System.exit (0), но если цикл не является чрезвычайно опасным, я буду продолжать использовать его, поскольку это просто будет относительно простым программа для домашних заданий. – DJOwen

+0

@ DJOwen: как это черт делает что-то более «эффективным»? Ваш вопрос озадачивает мой разум, и я даже не уверен, что вы знаете, о чем вы спрашиваете. –

+1

'while (stop == false)' или 'while (! Stop)' ?! Никогда не используйте '==' для этого. –

4
  1. Я не Java парень, но на многих языках 1==1 обычно оптимизирован для true в любом случае.

    Таким образом, вы можете использовать while(true) или while(1==1) или даже while (2==2).

    Это не имеет значения.

  2. В вашем случае это не имеет значения, потому что ваш цикл while не заставляет процессор работать много. Ваша петля в большинстве случаев ждет ввода пользователем. Не беспокойтесь об этом в этом случае.

  3. Хотя в некоторых случаях петли могут быть крайне неэффективными. В этих случаях лучше использовать События вместо петель.

Теоретический пример очень неправильно неэффективен в то время как цикл:

while(true) 
{ 
     if(textBox1.Text == "yes") x = 1; 
     if(textBox1.Text == "no") x = 2; 

     if (x == 1) doSomething(); 
     if (x == 2) doSomethingElse(); 
} 

Это очень неэффективно, потому что вы «спросить» интерфейс о данных в текстовом поле снова и снова, и нет никаких причин, чтобы сделать это , Нет паузы, процессор и память вынуждены делать то же самое снова и снова без паузы. В этом случае - Событие должно использоваться.

События существуют на многих языках программирования. Есть много сайтов, видеороликов и учебников, объясняющих события.

Посмотрите на это видео о событиях в Java:

Java Programming Tutorial - 52 - Event Handling on Youtube (by Bucky Roberts)

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

+2

Наконец, достойный ответ. Спасибо и 1+ –