2012-01-20 247 views
-1

我寫了一些Java代碼,如下所示,但它不像我預期的那樣運行。靠近底部,從if (upgrade == "Y")行開始。我做了一個測試,我輸入了Y,但是這行並沒有執行。你能幫我弄清楚爲什麼會發生這種行爲嗎?Java代碼沒有按預期執行

import java.io.*; 

class P4 
{ 
public static int get_price(String day_of_week, String age_group) 
{ 
    int price=0; 

    if (day_of_week == "WD") 
    { 
     if (age_group == "adult") 
      price = 66; 

     else if (age_group == "child") 
      price=48; 

     else 
      price = 32; 
    } 
    else 
    { 
     if (age_group == "adult") 
      price = 72; 

     else if (age_group == "child") 
      price=52; 

     else 
      price = 36; 
    } 

    return price; 
} 

public static void main(String[] args) 
{ 
    String adult2=null; 
    String child2=null; 
    String senior2=null; 
    String day_of_week=null; 
    String upgrade=null; 


    System.out.println("Enter Number of Adult Ticket:"); 
    BufferedReader adult1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     adult2 = adult1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Enter Number of Child Ticket:"); 
    BufferedReader child1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     child2 = child1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Enter Number of Senior Ticket:"); 
    BufferedReader senior1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     senior2 = senior1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Choose Weekday or Weekend Pass (WD/WE):"); 
    BufferedReader day_of_week1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     day_of_week = day_of_week1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Upgrade to Express Pass (Y/N):"); 
    BufferedReader upgrade1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     upgrade = upgrade1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    int adult = Integer.parseInt(adult2); 
    int child = Integer.parseInt(child2); 
    int senior = Integer.parseInt(senior2); 

    int total_a = adult * get_price(day_of_week, "adult"); 
    int total_c = child * get_price(day_of_week, "child"); 
    int total_s = senior * get_price(day_of_week, "senior"); 

    int total_price = total_a + total_c + total_s; 

    int total_people = adult + child + senior; 

    int upgrade_price = 0; 

    if (upgrade == "Y") 
    { 
     if (day_of_week == "WD") 
     { 
      upgrade_price = total_people * 30; 
     } 
     else 
     { 
      upgrade_price = total_people * 68; 
     } 
    } 
    else 
     upgrade_price = 0; 


    int price = upgrade_price + total_price; 

    System.out.println("The total price is $" + price); 

}} 
+2

==僅用於比較引用在你的情況等於()將是正確的選擇....你的IDE的調試功能(如果你有任何使用),將使你的生活更容易這些情況.....你不僅會了解你的程序的工作,而且還會減少解決錯誤所需的時間...... – aProgrammer

+0

我真的,真的推薦Joshua Block:用於學習java的「Effective Java」成語如何如何比較對象。 HTTP://java.sun。com/docs/books/effective/ –

回答

7

嘗試使用.equal ..所以,如果其他(age_group.equals( 「子」)

時退房.equals()方法:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#equals(java.lang.Object)

和。 equalsIgnoreCase()方法: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)

import java.io.*; 

class P4 
{ 
    public static int get_price(String day_of_week, String age_group) 
    { 
    int price=0; 

    if (day_of_week.equals("WD")) 
    { 
     if (age_group.equals("adult")) 
     price = 66; 
     else if (age_group.equals("child")) 
     price=48; 
     else 
     price = 32; 
    } 
    else 
    { 
     if (age_group.equals("adult")) 
     price = 72; 
     else if (age_group.equals("child")) 
     price=52; 
     else 
     price = 36; 
    } 

    return price; 
} 
2

對於字符串中的平等條件,您需要equal方法。

,而不是使用

"Y".equals(upgrade); //is a good idea 

upgrade == "Y" 

因爲字符串是對象,如果兩個字符串具有相同的對象的equals(Object)方法將返回true。 ==運算符只有在兩個String引用指向相同的底層String對象時纔會成立。因此,當通過equals(Object)方法進行測試時,表示相同內容的兩個字符串將相等,但如果它們實際上是同一個對象,那麼在使用==運算符進行測試時只會相等。

參考http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/

+0

我們必須首先爲字符串比較 例如 –

+0

好吧......但在我的公共靜態詮釋get_price()如果day_of_week ==「WD」的作品。任何想法爲什麼? –

+0

嘗試升級==「是」它不會工作==只有當兩個字符串引用指向相同的基礎字符串對象時,==運算符才爲真 –

5

你不能比較==字符串,你需要使用equals()

if("Y".equals(upgrade)) 

(我傾向於把恆定的第一,處理情況upgrade == null

+0

+1 StringLiteral.equals(variable) – Jeffrey

4

java string comparison

String s = "something", t = "maybe something else"; 
    if (s == t)  // Legal, but usually WRONG. 
    if (s.equals(t)) // RIGHT 
    if (s > t) // ILLEGAL 
    if (s.compareTo(t) > 0) // CORRECT> 

所以你的情況,使用:

if(upgrade.equals("Y")) { 
     //your codes 
} 

import java.io.*; 

class P4 
{ 
public static int get_price(String day_of_week, String age_group) 
{ 
    int price=0; 

    if (day_of_week.equals("WD")) 
    { 
     if (age_group.equals("adult")) 
      price = 66; 

     else if (age_group.equals("child")) 
      price=48; 

     else 
      price = 32; 
    } 
    else 
    { 
     if (age_group.equals("adult")) 
      price = 72; 

     else if (age_group.equals("child")) 
      price=52; 

     else 
      price = 36; 
    } 

    return price; 
} 

public static void main(String[] args) 
{ 
    String adult2=null; 
    String child2=null; 
    String senior2=null; 
    String day_of_week=null; 
    String upgrade=null; 


    System.out.println("Enter Number of Adult Ticket:"); 
    BufferedReader adult1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     adult2 = adult1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Enter Number of Child Ticket:"); 
    BufferedReader child1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     child2 = child1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Enter Number of Senior Ticket:"); 
    BufferedReader senior1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     senior2 = senior1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Choose Weekday or Weekend Pass (WD/WE):"); 
    BufferedReader day_of_week1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     day_of_week = day_of_week1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    System.out.println("Upgrade to Express Pass (Y/N):"); 
    BufferedReader upgrade1 = new BufferedReader(new InputStreamReader(System.in)); 
    try 
    { 
     upgrade = upgrade1.readLine();  
    } 
    catch (IOException e) { 
     System.out.println("Error!"); 
     System.exit(1); 
    } 

    int adult = Integer.parseInt(adult2); 
    int child = Integer.parseInt(child2); 
    int senior = Integer.parseInt(senior2); 

    int total_a = adult * get_price(day_of_week, "adult"); 
    int total_c = child * get_price(day_of_week, "child"); 
    int total_s = senior * get_price(day_of_week, "senior"); 

    int total_price = total_a + total_c + total_s; 

    int total_people = adult + child + senior; 

    int upgrade_price = 0; 

    if (upgrade.equals("Y")) 
    { 
     if (day_of_week.equals("WD")) 
     { 
      upgrade_price = total_people * 30; 
     } 
     else 
     { 
      upgrade_price = total_people * 68; 
     } 
    } 
    else 
     upgrade_price = 0; 


    int price = upgrade_price + total_price; 

    System.out.println("The total price is $" + price); 

}} 
0

我notised你update變量是字符串,因此,你應該使用:

if (upgrade.compareTo("Y") == 0) { 
     //your code 
    } 

這是比較字符串的正確方法。

+0

我剛剛測試了您的代碼上面和它的工作。您也可以使用upgrade.compareToIgnoreCase(「Y」)== 0 – karla