2011-02-27 60 views
0

我无法使switch语句做我想做的事情。当用户输入“w”或“h”时,该陈述应该将他们带回来进入新的体重或身高,但它并未这样做。如果有人能指出我做错了什么,我将不胜感激。 谢谢我在完善switch语句时遇到问题

package Assignments; 

import java.util。*; 公共类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); 
    bsa = Math.sqrt(((height*METERS_TO_CM)*weight)/BSA_CONSTANT); 


    if (bmi < 18.5) 
    { 
     classification = "Underweight"; 
    } 
    else if (bmi < 25) 
    { 
     classification = "Normal"; 
    } 
    else if (bmi < 30) 
    { 
     classification = "Overweight"; 
    } 
    else 
    { 
     classification = "Obese"; 
    } 

    do { 
     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(); 

     switch (response.charAt(0)) { 
     case 'w': response = "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"); break; 

     case 'h': response = "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"); break; 

     default: 
     } 
     System.out.println (response + "Is not a valid option please try again"); 
    } while (stdIn.next().compareToIgnoreCase("q")!=0); 





} 

}

+0

你需要把它包装成一个循环结构(即while(true)or similar→) – 2011-02-27 02:09:37

回答

0

你需要把你的case语句一个循环中。如果你想使用System.exit()a

while(true){ 

    switch(){ 
     .... 
    } 
} 

将工作。

我建议你让while循环依赖于用户输入什么不是'q',tho。

+0

好吧我试过把它放在一个do-while循环中,但我仍然没有得到它的正确工作 – Brad 2011-02-27 02:20:36

2

您从不打印出文字,例如System.out.println(响应),设置响应后=“输入新的高度”等。