2014-10-16 4 views
0

Таким образом, программы успешно выполняются, за исключением того, что когда условие завершения цикла while встречается, оно отправляет последнее диалоговое окно ввода JOptionPane перед отображением диалогового окна сообщения для завершения программы, где входной диалог ничего не достигнет.JOptionPane внутри цикла while, показывающего после цикла while, завершается

import javax.swing.JOptionPane; 
import java.util.Arrays; 

public class DiceGame2{ 
public static void main(String[] args){ 
    Dice[] dDice = new Dice[5]; 
    String[] sDice = new String[5]; 
    String finalSDice, sRoll; 
    int diceTotal=1, oldTotal=0, iRoll, numberOfRolls=0; 

    for(int i=0; i<5; i++){ 
     dDice[i]= new Dice(); 
    } 

    for(int i=0; i<5; i++){ 
     dDice[i].roll(); 
    } 
    while(diceTotal>=oldTotal){ 
     for(int i=0; i<5; i++){ 
      sDice[i]=Integer.toString(dDice[i].value()); 
     } 
     finalSDice=Arrays.toString(sDice);   
     oldTotal=diceTotal; 
     diceTotal=0; 
     for(int i=0; i<5; i++){ 
      diceTotal+=dDice[i].value(); 
     } 
     sRoll=JOptionPane.showInputDialog(null,"Your 5 dice contain the numbers:\n"+finalSDice+"\nThese dice have a total score of "+diceTotal+".\nEnter which dice you would like to reroll to attempt to increase your score:"); 
     iRoll=Integer.parseInt(sRoll); 
     dDice[iRoll-1].roll(); 
     numberOfRolls++; 
    } 
    finalSDice=Arrays.toString(sDice); 
    JOptionPane.showMessageDialog(null, "Your 5 dice contain the numbers:\n"+finalSDice+"\nThese dice have a total score of "+diceTotal+".\nYou've failed to increase your total score.\n You made "+numberOfRolls+" successful rolls."); 
} 
} 

Как это исправить?

+0

Не используйте JOptionPane в цикле :). Вы создаете кадр в цикле, это не хорошо, потому что вы не можете –

+0

Я не вижу, где ваш код это делает, можете ли вы показать нам ввод и вывод? – DreadHeadedDeveloper

+0

@DreadHeadedDeveloper Есть только два диалога JOptionPane, а программа - чрезвычайно простой счетчик костей. – Scy

ответ

0

Пересчитать diceTotal сразу после прокатки, поэтому ваш цикл while выйдет раньше.

+0

yep! это точно – Scy

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