2013-02-19 112 views
0

我是初學者,所以這個結果我得到了我的if else語句的一個條件,正在讓我大開眼界。除了QtyCalc變量大於等於100的情況外,一切正常。Finprice變量被列爲光盤變量,我找不到原因。幫幫我?if if else語句中的意外結果

import javax.swing.JOptionPane; 
public class SoftwareSales { 
    public static void main(String[] args) { 
     final int price = 99; 
     String Qty; 
     double QtyCalc, preprice, Finprice, disc; 

     Qty = JOptionPane.showInputDialog(null, "How many packages will you buy?"); 
     QtyCalc = Double.parseDouble(Qty); 
     preprice = QtyCalc * price; 

     if (QtyCalc >= 100) { 
      disc = (preprice * (0.5)); 
      Finprice = (preprice - disc); 
      JOptionPane.showMessageDialog(null, "Your discount is: " + disc + ".\n" + "Your final price is: " + Finprice + ". "); 
     } else if (QtyCalc >= 50 && QtyCalc <= 99) { 
      disc = (preprice * 0.4); 
      Finprice = (preprice - disc); 
      JOptionPane.showMessageDialog(null, "Your discount is: " + disc + ".\n" + "Your final price is: " + Finprice + ". "); 
     } else if (QtyCalc >= 20 && QtyCalc <= 49) { 
      disc = (preprice * 0.3); 
      Finprice = (preprice - disc); 
      JOptionPane.showMessageDialog(null, "Your discount is: " + disc + ".\n" + "Your final price is: " + Finprice + ". "); 
     } else if (QtyCalc >= 10 && QtyCalc <= 19) { 
      disc = (preprice * 0.2); 
      Finprice = (preprice - disc); 
      JOptionPane.showMessageDialog(null, "Your discount is: " + disc + ".\n" + "Your final price is: " + Finprice + ". "); 
     } else if (QtyCalc < 10 && QtyCalc >= 1) { 
      disc = 0; 
      Finprice = 0; 
      JOptionPane.showMessageDialog(null, "Sorry, there is no discount for purchases less than 10." + " Your price is: " + preprice); 

     } else { 
      JOptionPane.showMessageDialog(null, "You have entered an invalid number."); 
     } 
     disc = 0; 
     Finprice = 0; 

     System.exit(0); 
    } 
} 
+1

您正在使'disc'等於'preprice'和'Finprice'的一半等於另一半,因此它們是相等的。哪裏不對? – madth3 2013-02-19 01:36:51

+0

我得出結論,我應該更頻繁地離開計算機並喝點咖啡。我完全錯過了那裏的明顯(拍拍他的額頭)。感謝大家指出,請不要太多地笑:) – Jim 2013-02-19 01:57:41

回答

1

最終價格等於數量> = 100時的折扣,因爲折扣是50%...查看您發佈的代碼。特別是:

if (QtyCalc >= 100) { 
    disc = (preprice * (0.5)); 
    Finprice = (preprice - disc); 
    JOptionPane.showMessageDialog(null, "Your discount is: " + disc + ".\n" + "Your final price is: " + Finprice + ". "); 
} 
+0

啊,我一直盯着這個屏幕太久,沒有想到正確的事情。那麼......「毫無疑問,這是一個愚蠢的問題」這個規則呢? (我現在會躲在角落裏..)謝謝! :) – Jim 2013-02-19 01:52:21

+0

我知道這種感覺。相信我,你並不孤單;) – Stephen 2013-02-19 01:53:34

0

有沒有奇怪的行爲,只是簡單的數學:

 disc = (preprice * (0.5)); 
     Finprice = (preprice - disc); 

你也應該考慮消除冗餘代碼:

import javax.swing.JOptionPane; 
public class SoftwareSales { 
    public static void main(String[] args) { 
     final int PRICE = 99; 
     String qty; 
     double qtyCalc, preprice, finprice, disc; 
     disc = 0; 
     qtyCalc = 0; 

     boolean invalid = false; 
     do{ 
      invalid = false; 
      qty = JOptionPane.showInputDialog(null, "How many packages will you buy?"); 
      if (qty == null){ 
       return; 
      } 
      try{ 
       qtyCalc = Double.parseDouble(qty);   
      }catch(NumberFormatException e){ 
       invalid = true; 
      } 
     }while(invalid); 

     preprice = qtyCalc * PRICE; 
     if (qtyCalc >= 100) { 
      disc = (preprice * (0.5)); 
     } else if (qtyCalc >= 50 && qtyCalc <= 99) { 
      disc = (preprice * 0.4); 
     } else if (qtyCalc >= 20 && qtyCalc <= 49) { 
      disc = (preprice * 0.3); 
     } else if (qtyCalc >= 10 && qtyCalc <= 19) { 
      disc = (preprice * 0.2); 
     } else if (qtyCalc < 10 && qtyCalc >= 1) { 
      disc = 0; 
      finprice = 0; 
      JOptionPane.showMessageDialog(null, "Sorry, there is no discount for purchases less than 10. Your price is: " + preprice); 
      return; 
     } else { 
      JOptionPane.showMessageDialog(null, "You have entered an invalid number."); 
      return; 
     } 

     finprice = (preprice - disc); 
     JOptionPane.showMessageDialog(null, String.format("Your discount is: %.2f.\nYour final price is: %.2f. ",disc,finprice)); 

    } 
} 

還記得Java的約定變量:始終以小寫開頭。 決賽等級大寫

+0

謝謝你的建議和編輯的代碼!我對Java很陌生,所以我學到的大部分都是多餘的。我非常感謝幫助。 – Jim 2013-02-19 02:01:20

+0

好的,因爲你是java編程的新手,現在的代碼是使用java-naming-convention並且少了多餘的。我還添加了java字符串格式,這是一個很酷的功能;) – cIph3r 2013-02-19 02:16:22