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