好的我有一个do-while循环,当使用点击'q'时应该结束但是它给了我错误信息而不是请帮助。
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 :(得分:3)
q
不等于w
或h
。因此,条件适用于else if (response.charAt(0)!= 'w')
,因此您不会以实际的else if (response.charAt(0) == 'q')
条件来打破。
所以,以这种方式放置你的最后3 else if
-
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();
}
答案 1 :(得分:2)
问题在于以下几点:
else if (response.charAt(0)!= 'w')
// ...
else if (response.charAt(0)!= 'h')
每当响应为“q”时,则满足每个测试。摆脱它们;他们什么都不做你想要的。相反,在最后一次有效的char测试之后放一个普通的'else'并打印“not valid valid”提示符。
答案 2 :(得分:1)
你必须有类似的东西,
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();
}
答案 3 :(得分:0)
尝试
else if(response.charAt(0).contains('q'))