2013-11-23 2 views
0

Я хочу, чтобы программа продолжала цикл, пока пользователь не вводит -33. Для каждого цикла он отображает 4 варианта для голосования. После того, как пользователь проголосовал, он увеличивает значение для картины, на которую проголосовал пользователь на 1, а затем переходит к следующему раунду.Java: приращение пользовательского ввода по 1 для каждого цикла

Это код, который у меня есть на данный момент и его не очень работает, как я планировал:

import javax.swing.*; // import swing lib for i/o 
public class arrraa 
{ 
static String[] painting = new String[4];//these have been made global and static 
static int[] votescount = new int[4]; 

public static void main (String[] args) 
{ 
    // Initialize String Arrays 
    painting[0] = "Mona Lisa";//these have been moved so that it is only called once 
    painting[1] = "Water Lillies"; 
    painting[2] = "The Scream"; 
    painting[3] = "A Young Rembrandt"; 
    // Initialize int Arrays 

    votescount[0] = 0; 
    votescount[1] = 0; 
    votescount[2] = 0; 
    votescount[3] = 0; 


    voteperson(); 
    System.exit(0); 
} // end method main 

public static int voteperson() 
{ 
    // Declare String Variables 
    String userinput; 
    userinput = JOptionPane.showInputDialog 
    ("Please tell us which painting you think is the best."+"\n"+ 
    "Vote 1 "+painting[0]+"\n"+ 
    "Vote 2 "+painting[1]+"\n"+ 
    "Vote 3 "+painting[2]+"\n"+ 
    "Vote 4 "+painting[3]); 

    int answer = Integer.parseInt(userinput); 
    System.out.println(answer); 

     while(answer!=-33); 
     { 
      if (answer == 1) 
      { 
       votescount[0] = votescount[0]+1; 
      } 
      else if (answer == 2) 
      { 
       votescount[1] = votescount[1]+1; 
      } 
      else if (answer == 3) 
      { 
       votescount[2] = votescount[2]+1; 
      } 
      else if (answer == 4) 
      { 
       votescount[3] = votescount[3]+1; 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null, "Vote for one of these four paintings!"); 
      } 
      JOptionPane.showMessageDialog 
      (null, "The current votes are" + "\n" + 
      votescount[0] + " :" + painting[0] + "\n" + 
      votescount[1] + " :" + painting[1] + "\n" + 
      votescount[2] + " :" + painting[2] + "\n" + 
      votescount[3] + " :" + painting[3]); 

      answer++; 
     }//ENDS LOOP 


       return 0; 
}//ENDS voteperson 

}//ENDS CLASS 

Любые советы?

ответ

0

У вас проблема в том, что вы увеличиваете число answer после каждой итерации. Таким образом, он будет идти в бесконечность, но никогда не до -33, и вы окажетесь в бесконечном цикле.

Измените цикл следующим образом:

while(answer!=-33) 
    { 
     if (answer == 1) 
     { 
      votescount[0] = votescount[0]+1; 
     } 
     else if (answer == 2) 
     { 
      votescount[1] = votescount[1]+1; 
     } 
     else if (answer == 3) 
     { 
      votescount[2] = votescount[2]+1; 
     } 
     else if (answer == 4) 
     { 
      votescount[3] = votescount[3]+1; 
     } 
     else 
     { 
      JOptionPane.showMessageDialog(null, "Vote for one of these four paintings!"); 
     } 
     JOptionPane.showMessageDialog 
     (null, "The current votes are" + "\n" + 
     votescount[0] + " :" + painting[0] + "\n" + 
     votescount[1] + " :" + painting[1] + "\n" + 
     votescount[2] + " :" + painting[2] + "\n" + 
     votescount[3] + " :" + painting[3]); 

     userinput = JOptionPane.showInputDialog 
     ("Please tell us which painting you think is the best."+"\n"+ 
     "Vote 1 "+painting[0]+"\n"+ 
     "Vote 2 "+painting[1]+"\n"+ 
     "Vote 3 "+painting[2]+"\n"+ 
     "Vote 4 "+painting[3]); 

     answer = Integer.parseInt(userinput); 
    }//ENDS LOOP 

попросить новый пользовательский ввод после каждой итерации. Это должно решить вашу проблему.

+0

Спасибо за исправление. Когда я удалил ";" я просто закончил бесконечный цикл. Поправки, которые вы предложили, заставляют программу работать как запланировано! – AbbenGabben

0

Вы можете попробовать путем удаления semicolon ; вроде этого:

while(answer!=-33) //Remove the semicolon 

вместо

while(answer!=-33); 
0

Удалить запятой, прежде чем время цикла

в то время как (! Ответ = - 33) ;

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