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

如何使用最终的双重和多重折扣让Java程序正确输出?,java,Java,我正在编写一个Java程序,我想使用一个开关,但有一个固定的价格或最终的双重和多重折扣。这是令人沮丧的,我也不想投Int 我是一名37岁的学生,所以任何帮助都是非常好的。这是我的。在旁注中,使用if-else-if语句很容易,但这是一种不同的动物,有着如此多的可变折扣。该代码打印总数,但忽略所有情况,并进入默认值 package example; import java.util.Scanner; public class AcmeShirtsSwitch { public sta

我正在编写一个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);
    }
}

因为
shirt
是19.95,所以将它乘以任何整数都不会得到1、2、3或4。不要使用
折扣
变量,试着打开
衬衫
:这已经包含了您要购买的衬衫数量,实际上可以在[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


(同样,为尽可能少的衬衫数量提供最大的折扣也没有多大意义,是吗?

因为
衬衫
是19.95,乘以任何整数都不会得到1、2、3或4。不要使用
折扣
变量,试着打开
衬衫
:这已经包含了您要购买的衬衫数量,实际上可以在[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


(此外,为尽可能少的衬衫提供最大的折扣也没有多大意义,是吗?

此代码有几个问题:

  • 变量名:试着找到能更多说明其用途的变量名。有助于理解代码
  • (int)(shirt*shirts)
    将始终为0或至少为19,因此
    开关(折扣)
    没有多大意义
  • 这种类型的强制转换
    (int).40
    ,与
    .30
    相同,并且开关中的所有其他双精度转换将始终导致0
  • SHIRT\u COUNT
    (我想这应该是价格,见1.point)分配给
    SHIRT
    是没有意义的,因为
    SHIRT
    永远不会被覆盖。只需直接使用
    SHIRT\u COUNT
  • 开关中的折扣遵循一条简单规则:

    if(discount < 4)
        discount = .50 - 0.1 * discount;
    else
        discount = 0;
    
    if(折扣<4)
    折扣=.50-0.1*折扣;
    其他的
    折扣=0;
    

仅介绍最重要的问题。

此代码有几个问题:

  • 变量名:试着找到能更多说明其用途的变量名。有助于理解代码
  • (int)(shirt*shirts)
    将始终为0或至少为19,因此
    开关(折扣)
    没有多大意义
  • 这种类型的强制转换
    (int).40
    ,与
    .30
    相同,并且开关中的所有其他双精度转换将始终导致0
  • SHIRT\u COUNT
    (我想这应该是价格,见1.point)分配给
    SHIRT
    是没有意义的,因为
    SHIRT
    永远不会被覆盖。只需直接使用
    SHIRT\u COUNT
  • 开关中的折扣遵循一条简单规则:

    if(discount < 4)
        discount = .50 - 0.1 * discount;
    else
        discount = 0;
    
    if(折扣<4)
    折扣=.50-0.1*折扣;
    其他的
    折扣=0;
    

仅介绍最重要的问题。

以下是我解决问题的方法。它不是十全十美的,即小数点,但它是有效的

包装实例

导入java.util.Scanner

公共类ACMESHIRTSWITCH{

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    final double SHIRT_PRICE = 19.95;

    double shirt = SHIRT_PRICE;

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

    int shirts = input.nextInt();

    double discount;
    switch (shirts) {

    case 1:
        discount = 0.0;
        break;
    case 2:
        discount = 0.0;
        break;
    case 3:
        discount = .10;
        break;
    case 4:
        discount = .10;
        break;
    case 5:
        discount = .20;
        break;
    case 6:
        discount = .20;
        break;
    case 7:
        discount = .20;
        break;
    case 8:
        discount = .30;
        break;
    case 9:
        discount = .30;
        break;
    case 10:
        discount = .30;
        break;
    case 11:
        discount = .30;
        break;
    case 12:
        discount = .40;
        break;
    default:
        discount = .40;
        break;

    }
    double finalDiscount = (shirt * shirts) * (1.0 - discount);

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

    System.exit(1);

}

}这是我找到的解决问题的方法。它不是十全十美的,即小数点,但它是有效的

包装实例

导入java.util.Scanner

公共类ACMESHIRTSWITCH{

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    final double SHIRT_PRICE = 19.95;

    double shirt = SHIRT_PRICE;

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

    int shirts = input.nextInt();

    double discount;
    switch (shirts) {

    case 1:
        discount = 0.0;
        break;
    case 2:
        discount = 0.0;
        break;
    case 3:
        discount = .10;
        break;
    case 4:
        discount = .10;
        break;
    case 5:
        discount = .20;
        break;
    case 6:
        discount = .20;
        break;
    case 7:
        discount = .20;
        break;
    case 8:
        discount = .30;
        break;
    case 9:
        discount = .30;
        break;
    case 10:
        discount = .30;
        break;
    case 11:
        discount = .30;
        break;
    case 12:
        discount = .40;
        break;
    default:
        discount = .40;
        break;

    }
    double finalDiscount = (shirt * shirts) * (1.0 - discount);

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

    System.exit(1);

}

}

您不能在
双精度
上切换
,这是语言语法所不允许的,无论如何都很难正确执行。只需使用
if-else
块而不是
开关
。另外,请记住,您的作业
折扣=(int).40
并没有达到您期望的效果。在一个简单的程序中测试它,通过在控制台上打印输出,你会发现它的行为异常。当你在Java中将一个浮点数转换为一个int时,它会截断分数——只会删除它。因此,
(int)0.40
等于0,其他的也等于0。您应该有一个单独的变量来保存这些0.40、0.30等,并使其成为一个
。我首先将SHIRT\u COUNT重命名为SHIRT\u PRICE。双打对价格不利,看看周围。使用小数点。你不能在双精度上切换,这是语言语法所不允许的,无论如何都很难做到正确。只需使用
if-else
块而不是
开关
。另外,请记住,您的作业
折扣=(int).40
并没有达到您期望的效果。在一个简单的程序中测试它,通过在控制台上打印输出,你会发现它的行为异常。当你在Java中将一个浮点数转换为一个int时,它会截断分数——只会删除它。因此,
(int)0.40
等于0,其他的也等于0。您应该有一个单独的变量来保存这些0.40、0.30等,并使其成为一个
。我首先将SHIRT\u COUNT重命名为SHIRT\u PRICE。双打对价格不利,看看周围。使用小数点。把每件衣服都改成十进制。也许他们是在劝阻人们不要买衬衫@大卫康拉德-或鼓励购买他们一个一个。谢谢你的帮助。我试着按照你建议的方式去做,但还是失败了,但是我能够删除所有的强制转换Int。@纹身技术-试着调试你的代码,看看变量是如何分配和更改的。大多数现代IDE都提供这样的功能,这就是我得到的。错误:JDW