1
votes

Comment continuer à demander la bonne entrée utilisateur en Java?

Problème très simple que je n'arrive pas à comprendre.

J'écris un programme de vélo qui calcule MPH en fonction de la cadence et des vitesses réglées sur le vélo.

Les vitesses qui peuvent être réglées sont entre 1 et 3 et la cadence est entre 1 et 100 .

TL; DR Si un utilisateur entre un nombre en dehors de cette plage, j'ai du mal à comprendre comment le programme l'invite à nouveau jusqu'à ce qu'il entre la plage correcte. J'ai également du mal à trouver comment faire en sorte que tout le programme BicycleTest se répète une fois les calculs terminés.

J'ai recherché d'autres questions et j'ai remarqué que plusieurs personnes parlaient de boucles while , ce que j'ai essayé, mais j'ai dû le faire de manière incorrecte car il ne faisait pas de boucle au début. Je le laisse à ma boucle if-else d'origine, mais j'apprécierais de l'aide sur la façon d'utiliser correctement une boucle while pour cette situation.

Code ci-dessous:

 import java.util.Scanner;
public class BicycleTest
{

public static void main(String[] args)
{

Bicycle bike = new Bicycle();

Scanner input = new Scanner(System.in);

System.out.println("Enter the gear :");
bike.setGear(input.nextInt());

System.out.println("Enter the cadence :");
bike.setCadence(input.nextInt());

int speed = bike.getSpeed();
System.out.println ("Your speed in MPH is: ");
System.out.println(speed);

}

}   

puis voici le code BicycleTest:

public class Bicycle
{
 // instance variables declared private
    private int gear;
    private int cadence;
    private int speed;


   //accessor (get) method for gear
   public int getGear()
   {
       return gear;
   }

   //set method for gear
    public void setGear(int gear)
       {
          if (gear >=1 && gear <= 3)
          {
              this.gear = gear;
          }

          else
          {
              System.out.println ("Sorry, please enter a number between 1-3");
          }
      }

   //accessor (get) method for cadence
   public int getCadence()
   {
       return cadence;
   }

   //set method for cadence
   public void setCadence(int cadence)
   {
       if (cadence >=1 && cadence <=100)
       {
           this.cadence = cadence;
       }
       else
         {
            System.out.println ("Sorry, please enter a number between 1-100");
         }


   }

   //accessor (get) method for speed
   public int getSpeed()
   {
       if (gear == 1)
       {
           return cadence / 12;
       }
       else if (gear == 2)
       {
           return cadence / 6;
       }
       else if (gear == 3)
       {
           return cadence / 4;
       }

       else
       {
            return 0;
       }


  }

} // end of main


1 commentaires

Commencez par une boucle do-while , pour un exemple , exemple , exemple


3 Réponses :


3
votes

Voici comment obtenir ce que vous voulez avec une boucle while . La sauce secrète est le drapeau booléen dont dépend la boucle pour savoir quand sortir. Cet indicateur n'est ajusté que lorsque l'entrée utilisateur se situe dans la plage acceptable.

Notez que l'entrée utilisateur est affectée à une variable, juste pour des raisons de clarté.

boolean badAnswer = true;
int gear = 0;

while(badAnswer)
{
    System.out.println("Enter the gear :");
    gear = input.nextInt();

    if(gear > 0 && gear <= 3)
    {
        bike.setGear(gear);
        badAnswer = false;
    }
    else
    {
        System.out.println("Please enter a value for gear between 1 and 3.");

    }
}

Si vous voulez une validation dans votre classe Bicycle plutôt que dans le programme du pilote, vous pouvez placer le test de plage dans setGear () et renvoyer une valeur booléenne qui servirait à définissez la condition de sortie de la boucle while dans votre classe de pilote.


0 commentaires

2
votes
public static void main(String[] args) {
    Bicycle bike = new Bicycle();

    Scanner input = new Scanner(System.in);
    int intGear = 0;
    int intCadence=0;
        do {
            System.out.println("Enter the gear :");
            intGear = input.nextInt();

        } while(bike.setGear(intGear));
        do {
            System.out.println("Enter the cadence :");
            intCadence = input.nextInt();
        } while(bike.setCadence(intCadence));
            int speed = bike.getSpeed();
            System.out.println("Your speed in MPH is: ");
            System.out.println(speed);

    }

0 commentaires

1
votes

Utilisez une boucle while avec une condition fausse boucle à travers le fragment, pour mettre à jour la valeur, stockez-la dans une variable, et retournez la variable une fois que la condition pour la boucle while est remplie!


1 commentaires

Félicitations pour votre première réponse sur StackOverflow. Bien que l'approche que vous suggérez puisse très bien fonctionner, elle peut encore être un peu difficile à comprendre. Pensez à améliorer votre réponse en la modifiant, en ajoutant quelques explications supplémentaires et peut-être un petit bout de code?