Do-while loop completion

Ok I have a do-while loop that should end when use uses "q", but it gives me an error message instead, please help.

package Assignments; import java.util.*; public class assignment3 { 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 double weight; // Weight in kilograms double height; // Height in meters String classification; // Classifies the user into BMI categories double bsa; // Body surface area System.out.print("Welcome to the BMI and BSA Calculator to begin enter weight in kilograms."); weight = stdIn.nextDouble(); System.out.print("Enter height in meters: "); height = stdIn.nextDouble(); bmi = weight/(height*height); // Calculates BMI bsa = Math.sqrt(((height*METERS_TO_CM)*weight)/BSA_CONSTANT); // Calculates BSA if (bmi < 18.5) { classification = "Underweight"; } else if (bmi < 25) { classification = "Normal"; } else if (bmi < 30) { classification = "Overweight"; } else { classification = "Obese"; } System.out.println("Choose Options below to set height and weight"); System.out.println("Your classification is: " + classification); System.out.println("(H)eight: " + height + " meters"); System.out.println("(W)eight: " + weight + " kilograms"); System.out.printf("BMI: %.1f\n", bmi); System.out.printf("BSA: %.2f\n", bsa); System.out.println("(Q)uit"); String response = stdIn.next(); do { if (response.charAt(0)== 'w') { System.out.println("Enter new weight: "); weight = stdIn.nextDouble(); System.out.println("Choose Options below to set height and weight"); System.out.println("Your classification is: " + classification); System.out.println("(H)eight: " + height + " meters"); System.out.println("(W)eight: " + weight + " kilograms"); System.out.printf("BMI: %.1f\n", bmi); System.out.printf("BSA: %.2f\n", bsa); System.out.println("(Q)uit"); bmi = weight/(height*height); bsa = Math.sqrt(((height*METERS_TO_CM)*weight)/BSA_CONSTANT); response = stdIn.next(); } else if (response.charAt(0) == 'h') { System.out.println("Enter new height: "); height = stdIn.nextDouble(); System.out.println("Choose Options below to set height and weight"); System.out.println("Your classification is: " + classification); System.out.println("(H)eight: " + height + " meters"); System.out.println("(W)eight: " + weight + " kilograms"); System.out.printf("BMI: %.1f\n", bmi); System.out.printf("BSA: %.2f\n", bsa); System.out.println("(Q)uit"); bmi = weight/(height*height); bsa = Math.sqrt(((height*METERS_TO_CM)*weight)/BSA_CONSTANT); response = stdIn.next(); } else if (response.charAt(0)!= 'w') { System.out.println("That is not a valid choice try again"); response = stdIn.next(); } else if (response.charAt(0)!= 'h') { System.out.println("that is not a valid choise try again"); response = stdIn.next(); } else if (response.charAt(0) == 'q') { break; } } while (response != "q"); } } 
0
source share
4 answers

q not equal to either w or h . So, the condition is true for else if (response.charAt(0)!= 'w') , and therefore you are not going to fulfill the current condition else if (response.charAt(0) == 'q') .

So, put the last 3 else if in this way -

  else if (response.charAt(0) == 'q') { break; } else if (response.charAt(0)!= 'w') { System.out.println("That is not a valid choice try again"); response = stdIn.next(); } else if (response.charAt(0)!= 'h') { System.out.println("that is not a valid choise try again"); response = stdIn.next(); } 
+3
source

The problem is the following lines:

 else if (response.charAt(0)!= 'w') // ... else if (response.charAt(0)!= 'h') 

Whenever the answer is "q", each of these tests is performed. Get rid of them; they do nothing. Instead, put an "else" after the last valid char test and print the "invalid selection" prompt.

+2
source

You should have something like

  if (response.charAt(0)== 'w') { ... } else if(response.charAt(0)== 'h') { ... } else if(response.charAt(0)== 'q') { System.exit(0); } else { System.out.println("That is not a valid choice try again"); response = stdIn.next(); } 
+1
source

try

else if (response.charAt (0) .contains ('q'))

0
source

Source: https://habr.com/ru/post/1341235/


All Articles