如何使用最终的双重和多重折扣让Java程序正确输出?
我正在编写一个Java程序,我想使用一个开关,但有一个固定的价格或最终的双重和多重折扣。这是令人沮丧的,我也不想投Int 我是一名37岁的学生,所以任何帮助都是非常好的。这是我的。在旁注中,使用if-else-if语句很容易,但这是一种不同的动物,有着如此多的可变折扣。该代码打印总数,但忽略所有情况,并进入默认值如何使用最终的双重和多重折扣让Java程序正确输出?,java,Java,我正在编写一个Java程序,我想使用一个开关,但有一个固定的价格或最终的双重和多重折扣。这是令人沮丧的,我也不想投Int 我是一名37岁的学生,所以任何帮助都是非常好的。这是我的。在旁注中,使用if-else-if语句很容易,但这是一种不同的动物,有着如此多的可变折扣。该代码打印总数,但忽略所有情况,并进入默认值 package example; import java.util.Scanner; public class AcmeShirtsSwitch { public sta
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
(此外,为尽可能少的衬衫提供最大的折扣也没有多大意义,是吗?此代码有几个问题:
- 变量名:试着找到能更多说明其用途的变量名。有助于理解代码
将始终为0或至少为19,因此(int)(shirt*shirts)
没有多大意义开关(折扣)
- 这种类型的强制转换
,与(int).40
相同,并且开关中的所有其他双精度转换将始终导致0.30
- 将
(我想这应该是价格,见1.point)分配给SHIRT\u COUNT
是没有意义的,因为SHIRT
永远不会被覆盖。只需直接使用SHIRT
SHIRT\u COUNT
开关中的折扣遵循一条简单规则:
if(discount < 4) discount = .50 - 0.1 * discount; else discount = 0;
if(折扣<4) 折扣=.50-0.1*折扣; 其他的 折扣=0;
仅介绍最重要的问题。此代码有几个问题:
- 变量名:试着找到能更多说明其用途的变量名。有助于理解代码
将始终为0或至少为19,因此(int)(shirt*shirts)
没有多大意义开关(折扣)
- 这种类型的强制转换
,与(int).40
相同,并且开关中的所有其他双精度转换将始终导致0.30
- 将
(我想这应该是价格,见1.point)分配给SHIRT\u COUNT
是没有意义的,因为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