2017-03-06 55 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字符串比較不=標誌工作