开发者

Ending a for loop by pressing 'q'

I have been doing a project for my java class. For the project I have to have the user enter input and calculate their body mass index and body surface area the program is supposed to remain running until the user enters a "q". I cannot get my program to stop running when a "q" is put in it just crashes. Also I am very new to java and programming in general so I would appreciate any help. My code is as follows. Thanks : )

public static void main(String[] args) {

        //Scanner
        Scanner stdIn = new Scanner(System.in);

        //Variables
        final double METERS_TO_CM = 100;   // The constant to convert meters to centimeters
        final double BSA_CONSTANT = 3600;  // The constant to divide by for bsa
        double bmi;                        // Body Mass Index
        String weight;                     // Weight in kilograms
        String height;                     // Height in meters
        String classification;             // Classifies the user into BMI categories 
        double bsa;                        // Body surface area



        do {
            System.out.print("Welcome to the BMI and BSA Calculator to begin enter weight in kilograms.");
            weight = stdIn.next();
            System.out.print("Enter height in meters: ");
            height = stdIn.next();
            double height2 = Double.parseDouble(height);
            double weight2 = Double.parseDouble(weight);
            bmi = weight2/(height2*height2);
        if (bmi < 18.5)
        {
            cla开发者_开发问答ssification = "Underweight";
        }
        else if (bmi < 25)
        {
            classification = "Normal";
        }
        else if (bmi < 30)
        {
            classification = "Overweight";
        }
        else
        {
            classification = "Obese";
        }

        System.out.println("Your classification is: " + classification);
        bsa = Math.sqrt(((height2*METERS_TO_CM)*weight2)/BSA_CONSTANT);
        System.out.printf("BMI: %.1f\n", bmi);
        System.out.printf("BSA: %.2f\n", bsa);


        System.out.println("Hit 'q' to quit");
        } while (stdIn.nextLine().compareToIgnoreCase("q")==0);






    }
}


I would guess that your "q" input is written in weight and therefore you try to parse it to a Double, which throws an unhandled Exception and stops the execution.

You should handle this Exception and make the system break the while loop when triggering it.


You're grabbing the entire line for your while loop condition.

Try just grabbing the next() instead of nextLine().

Also, you're looking at while it DOES equal 0 ... meaning equal. I'd change that to != instead. You want to continue looping while the next token is NOT Q.


Let's make a structural change to make this easier for you to do.

We are going to change it so that your do-while loop always is running, until you explicitly tell it to stop.

Your current while is:

while(stdIn.nextLine().compareToIgnoreCase("q")==0);

Which works ok, but we have a more simple way to do this. Have you heard of the break statement?

I would suggest you use break. This statement will 'break' you out of the while loop; basically it tells the program to stop looping when it is called. This will be a bit easier to follow than your somewhat confusing do-while.

do {

   //Your Do code goes here, as before
   ...
   //

   //Your newly added break statement will go here. 
   //This breaks out of the while loop when your inputed 'choice' value is
   //equal to the string of "q" (for quit)
   if (Choice.equals("q"))){
     break;
     //When break is called nothing else in the loop will run
   }

   //Same thing but with the string of "quit"
   if (Choice.equals("quit"){
     break;
   }



}while (true); 
//Your new while statement is simply while(true) which will run until break is called

Hopefully that is helpful to you.


Don't actually use a loop. Since it's impractical someone would ever max the call stack out by answering too many questions, just make the whole operation a function. At the end of the function, call itself if the result isn't Q.


its simple use this

while (true)
{
    Console.WriteLine("Start processing");
    //processing code here
    Console.WriteLine("finish processing");

    Console.WriteLine("start again? y/n?");
    if (Console.ReadLine().Equals("n"))
        break;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜