0

私は初心者なので、if else ステートメントの 1 つの条件に対して得られるこの結果は、私の心を吹き飛ばしています。QtyCalc 変数が >= 100 の場合を除いて、すべてが正常に機能します。Finprice 変数はディスク変数としてリストされており、その理由がわかりません。ヘルプ?

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);
    }
}
4

2 に答える 2

1

割引が 50% であるため、数量が >= 100 の場合、最終価格は割引と同じです...投稿したコードを見てください。特に:

if (QtyCalc >= 100) {
    disc = (preprice * (0.5));
    Finprice = (preprice - disc);
    JOptionPane.showMessageDialog(null, "Your discount is: " + disc + ".\n" + "Your final price is: " + Finprice + ". ");
}
于 2013-02-19T01:36:47.603 に答える
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 規則も覚えておいてください。常に小文字で始めてください。finals は常に大文字

于 2013-02-19T01:37:21.877 に答える