如何使用最终的双倍折扣和多次折扣让我的Java程序正确输出?

时间:2016-01-22 01:08:17

标签: java

我正在编写一个Java程序,我想使用一个开关,但有一个定价或最终的双倍和多个折扣。这令人沮丧,我也不想要投出Int。

完全披露 - 我是一名37岁的学生,所以任何帮助都会很棒。这就是我所拥有的。在旁注上使用if else if语句很容易,但这是一个具有如此多变量折扣的不同动物。代码打印总数,但忽略所有情况并且默认为。

package example;

import java.util.Scanner;

public class AcmeShirtsSwitch {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        final double SHIRT_COUNT = 19.95;

        double shirt = SHIRT_COUNT;

        // Get number of shirts purchased.
        System.out.println("Enter the number of shirts "
                + "you have purchased to see your discount. ");

        int shirts = input.nextInt();


        int discount = (int)(shirts * shirt);
        switch (discount) {

        case 1:
            discount = (int) .40;
            break;
        case 2:
            discount = (int) .30;
            break;
        case 3:
            discount = (int) .20;
            break;
        case 4:
            discount = (int) .10;

        default:
            discount = 0;
            break;
        }
        double finalDiscount = (shirt * shirts) * (1.0 - discount);

        System.out.println("Your discount is " + discount);
        System.out.println("Your total is " + finalDiscount);
    }
}

3 个答案:

答案 0 :(得分:2)

此代码有几个问题:

  • 变量名:尝试查找更多关于其用途的变量名。帮助我们理解代码。
  • (int) (shirt * shirts)将始终为0或至少为19,因此switch(discount)没有多大意义。
  • 这种演员(int) .40,与.30相同,而且开关中的所有其他双打将始终为0。
  • 分配SHIRT_COUNT,(应该是价格,我猜,见1.点)到shirt是没有意义的,因为shirt永远不会被覆盖。只需直接使用SHIRT_COUNT即可。
  • switch中的折扣遵循一条简单的规则:

    if(discount < 4)
        discount = .50 - 0.1 * discount;
    else
        discount = 0;
    

只是为了解决最重要的问题。

答案 1 :(得分:1)

由于shirt是19.95,将其乘以任意整数将永远不会产生1,2,3或4.而不是使用discount变量,请尝试启用shirts:这已经包含了你要购买的衬衫数量,实际上可以在[1,4]范围内。

double discount;
    switch (shirts) {

    case 1:
        discount = .40;
        break;
    case 2:
        discount = .30;
        break;
    case 3:
        discount = .20;
        break;
    case 4:
        discount = .10;

    default:
        discount = 0;
        break;
    }

双打价格不够精确,请查看BigDecimal

(另外,对于尽可能少的衬衫给予最大折扣没有多大意义,是吗?)

答案 2 :(得分:0)

这是我解决问题的解决方案。它不完美,即小数位,但它有效。

包示例;

import java.util.Scanner;

公共课AcmeShirtsSwitch {

NSSound(named:"Hero")!.play()

}