Я пытаюсь создать код, который принимает количество товаров, купленных покупателем, а затем распечатывает, на сколько будет скидка.
1-3 items purchased will get no discount
4-6 items purchased will get 5% discount
7-10 items purchased will get 10% discount
11 or more items purchased will get a 15% discount
Любая помощь будет оценена, спасибо. Вот код, который я создал.
package discount;
import java.util.Scanner;
public class Discount {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Input the number of items: ");
int quantity = input.nextInt();
int[] discount = {0, 5, 10, 15};
if (quantity >= 1 && quantity <4){
System.out.print("no discount");
} else if (quantity >= 4 && quantity <7){
System.out.print(discount[1] + "% discount");
} else if (quantity >= 7 && quantity <11){
System.out.print(discount[2] + "% discount");
} else if (quantity >= 11){
System.out.print(discount[3] + "% discount");
}
}
}
3 ответа
Предлагаю применить декомпозицию, выделив код, отвечающий за расчет скидок и печать сообщений, в отдельные методы. Это сделает ваш код чище даже без выражений переключения.
<сильный>1. Рассчитать скидку:
public static int getDiscount(int items) {
return switch(items) {
case 0, 1, 2, 3 -> 0;
case 4, 5, 6 -> 5;
case 7, 8, 9, 10 -> 10;
default -> 15;
};
}
<сильный>2. Распечатайте сообщение:
public static void printMessage(int discount) {
switch(discount) {
case 0 -> System.out.print("no discount");
default -> System.out.println(discount + "% discount");
}
}
<сильный>3. главное:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Input the number of items: ");
printMessage(getDiscount(input.nextInt()));
}
- Этот код будет работать с Java 14 и выше.
Без Kotlin when
Java switch
может делать, а может и не делать все, что вам нужно. Но если вы хотите писать с помощью if-else
, он может очистить:
if(quantity > 0){
int discount = -1
if(quantity < 4) discount = 0;
else if (quantity < 7) discount = 5;
else if (quantity < 11) discount = 10;
else discount = 15;
printDiscountMessage(discount)
}
Вы можете обойтись без половины многих ваших операторов if (вам не нужна проверка нижних границ)
if (quantity <4){
System.out.print("no discount");
}
else if (quantity <7){
System.out.print(discount[1] + "% discount");
}
else if (quantity <11){
System.out.print(discount[2] + "% discount");
}
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].
TreeMap
является альтернативой.discount
и вместо этого использовать литералы в телах операторов if. Преимущество этого заключается в том, что вы можете сразу увидеть, какое количество связано с какой скидкой, и исключает возможность наличия индекса массива в операторе if, которого нет вdiscount
. Однако это изменение противоречит цели изучения Java, и я надеюсь, что вы получили и исправили хотя бы одинArrayIndexOutOfBoundsException
, работая над этим кодом!