Search code examples
javajgrasp

Looping two inputs until the user has finished entering


I'm trying to loop these two questions("please enter direction") AND ("Please enter distance in miles"). If incorrect value is inputed then it will reprompt the user to enter a correct value. So these two questions will loop until the user is done entering and a "Destination" is reached. I got the first question to loop if the user doesn't type north east south or west, but the second question I could only make it loop on itself.

boolean reprompt = true;
//Prompt for direction and miles

while (reprompt) {

   directions = JOptionPane.showInputDialog(null, "Please enter a direction: ");
   if (directions.equalsIgnoreCase("East")) {
      finalxCoord = finalxCoord + numOfMiles;
      reprompt = false;
      }
      else if (directions.equalsIgnoreCase("West")) {
               finalxCoord = finalxCoord - numOfMiles;
               reprompt = false;
               }
             else if (directions.equalsIgnoreCase("North")) {
                     finalyCoord = finalyCoord + numOfMiles;
                     reprompt = false;
                     }
                     else if (directions.equalsIgnoreCase("South")) {
                             finalyCoord = finalyCoord - numOfMiles;
                             reprompt = false;
                             }
             else {
                 reprompt = true;
                 JOptionPane.showMessageDialog(null, error);
             }    
        }

   numOfMiles = Double.parseDouble(JOptionPane.showInputDialog(null, "Please enter distance in miles: "));
   if (numOfMiles > 0) {
   totalMiles += numOfMiles;
   JOptionPane.showMessageDialog(null, "miles: " + totalMiles);


   }
   else 
   JOptionPane.showMessageDialog(null, error);

Solution

  • Just make the second question inside a while loop with another boolean just as you did for the first question. Code:

    boolean restart = true;
    //Prompt for direction and miles
    while(restart){    
    
    boolean reprompt = true;
    boolean reprompt_SecondQuestion=true;
    
    while (reprompt) {
    
       directions = JOptionPane.showInputDialog(null, "Please enter a direction: ");
       if (directions.equalsIgnoreCase("East")) {
          finalxCoord = finalxCoord + numOfMiles;
          reprompt = false;
          }
          else if (directions.equalsIgnoreCase("West")) {
                   finalxCoord = finalxCoord - numOfMiles;
                   reprompt = false;
                   }
                 else if (directions.equalsIgnoreCase("North")) {
                         finalyCoord = finalyCoord + numOfMiles;
                         reprompt = false;
                         }
                         else if (directions.equalsIgnoreCase("South")) {
                                 finalyCoord = finalyCoord - numOfMiles;
                                 reprompt = false;
                                 }
                 else {
                     reprompt = true;
                     JOptionPane.showMessageDialog(null, error);
                 }    
            }
       while(reprompt_SecondQuestion)
       {
            numOfMiles = Double.parseDouble(JOptionPane.showInputDialog(null, "Please enter distance in miles: "));
            if (numOfMiles > 0) {
            totalMiles += numOfMiles;
            JOptionPane.showMessageDialog(null, "miles: " + totalMiles);
            reprompt_SecondQuestion = false;
       }
       else 
       {
    
       JOptionPane.showMessageDialog(null, error);
       }
      }
    
        //Prompt user to type "done"
        //Capture user input
        if(user_input.equals("Done"))
        {
           //Display direction and miles to user
           restart = false;
        }
        else
        {
        }
      }