2017-03-06 88 views
-2

这会影响到我,直到我理解正确。java - 结束用户输入的do-while循环

我目前正在参加我的第二个OOP课程,除了我们这次使用Java。除了循环之外,一切都应该如此。输入姓名,年龄,体重,身高(分别为英尺和英寸),并输出与您所属类别(体重不足,体重正常,超重,肥胖)相关的BMI。

对于此作业,我们应该使用循环输入尽可能多的名称,直到输入“X”以退出。

请看看我的代码,并告诉我我需要做些什么来完成这项工作。我什至尝试了一段时间循环,并没有奏效。

import java.util.Scanner; 

public class Lab1Main { 

public static void main(String[] args) 
{ 
    System.out.println("BMI Calculator"); 

    // Start Scanner 
    Scanner input = new Scanner(System.in); 

    // Declare variables 
    String u_name; 
    Double u_age, u_feet, u_inches, u_weight; 

    // Create new HealthProfile 
    HealthProfile client = new HealthProfile(); 

    // Start do-while 
    do { 
    // Enter name 
    System.out.print("Enter name or X to quit: "); 
    u_name = input.nextLine(); 
    // Enter age 
    System.out.print("Enter your age: "); 
    u_age = Double.parseDouble(input.nextLine()); 
    // Enter height (feet) 
    System.out.print("Enter your height(feet): "); 
    u_feet = Double.parseDouble(input.nextLine()); 
    // Enter height (inches) 
    System.out.print("Enter your height(inches): "); 
    u_inches = Double.parseDouble(input.nextLine()); 
    // Enter weight 
    System.out.print("Enter your weight: "); 
    u_weight = Double.parseDouble(input.nextLine()); 

    // Set variables from HealthProfile 
    client.setName(u_name); 
    client.setAge(u_age); 
    client.setFeet(u_feet); 
    client.setInches(u_inches); 
    client.setWeight(u_weight); 

    // Display results 
    System.out.println("********** HEATLH PROFILE FOR " + client.getName() + " **********"); 
    System.out.println("Age: " + client.getAge()); 
    System.out.println("Weight: " + client.getWeight()); 
    System.out.println("Height (in inches): " + client.getHeight()); 
    System.out.println("Your BMI is : " + client.getBMI()); 
    System.out.println("You are considered: " + client.getCategory()); 
    System.out.println("Your max heart rate is: " + client.getMaxHR()); 


    } while (u_name != "X"); 
    System.out.println(); 
}// end main 
}// end class 
+0

问题的答案已经存在 –

+0

@Nazimch,如果它确实,5个小时我研究了我的课程材料和这里没有产生一个工作结果。这个确切的问题是不太可能存在的。 – cmdshorty

+1

这个确切的问题*,也许不是。但是这个*场景*(循环直到某个特定的输入)已被问及数千次。这个*问题*(比较Java中的字符串)已经被讨论太多次了。 – shmosel

回答

0

问题是,do body会运行整个,直到您达到条件,它将在哪里出现循环。

您必须在用户输入后检查名称是否为“X”,如果是,请退出循环wirh中断。

do { 
// Enter name System.out.print("Enter name or X to quit: "); 
u_name = input.nextLine(); 
if (u_name.equals("X")) break; 

} while (true); 

编辑:此外,我忘了提,你不应该使用等于运算符(==!=),而使用equals()方法。

+0

谢谢@Tatranskymedved。不幸的是,课程材料没有提到这方面的任何内容。虽然我确信我的教授会给我们一种不同的方式来做到这一点。 – cmdshorty

+0

对于平等而言,它肯定是答案 - 问题在哪里。但是,如果输入名称“X”,系统会提示您输入其他所有内容,直到它到达“while(cond)”结尾。 'break'会立即跳出循环。 – Tatranskymedved

0

在Java中,String类以稍微不同的方式工作。 '=='运算符不会被重写以比较字符串。

String a="abcd"; 
String b="abcd"; 
System.out.println(a==b) // gives false 

默认情况下Java会比较两个变量的内存地址而不是值。

要比较该值,可以使用equals函数。

所以,正确的循环条件将

u_name.equals("X"); 

这将比较存储在两个字符串值。

此外,由于您正在使用骆驼案例作为函数名称,因此也要考虑变量名称。

+0

谢谢Sarthak。我明天会着手解决这个问题,然后回来标记适当的答案。是的,我知道我的命名习惯不合适。最近PHP编码太多,并伴随着时间限制。 – cmdshorty

0

请更换此行

while (u_name != "X");

while (!"X".equals(u_name));

在Java字符串比较不=标志工作