2013-02-19 45 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