Простая скидка

Готовлюсь к экзамену и у меня проблемы, я новичок. Это калькулятор скидок. Сумка с кофе стоит 3,75 € 10 пакетов или более 5% скидка 20 пакетов или более 10% скидка

Что у меня пока

import java.util.Scanner;
public class discount {
public static void main (String[] args){

//Scanner input; Keep this as one line. It is good practice
Scanner input = new Scanner(System.in);
double bag;
double discount;
double cost = 3.75;

//Input = new Scanner(System.ini);     combined with line above.
System.out.println("Enter Numer of bag");
bag = input.nextDouble();
//If (bag ==>10&&<20) × .05  incorrect Java syntax

if(bag >= 10 && < 20) {
 discount = 0.05;
}
else if(bag >= 20) {
  discount = 0.10;
} 
else {
  discount = 0;
}

double finalPrice;
finalPrice = (cost * bag) * (1 - discount);

System.out.println("You ordered " + bag + " bags of coffee.");
System.out.println("Your dicount is " + discount + "%");
System.out.println("You total is: " + finalPrice);

} }

3 ответа

Решение

if(bag >= 10 && < 20)

в

if (bag> = 10 && bag <20)

Легкая ошибка для начинающего! Я вроде согласен с лектором, редактором и идеей, изучая основы. Вам нужно научиться читать то, что компилятор говорит вам, что это неправильно. И как только вы узнаете проблему, я думаю, вы согласитесь, приведенное выше сообщение об ошибке синтаксиса дает хорошее представление о том, что не так.

Обычно я не одобряю выполнение заданий для учеников Тома Сойера, но в этом случае я думаю, что у любого новичка, который учится смотреть на проблему по-другому, есть возможность получить образование.

Это простой класс, но если вы хотите стать программистом, это хорошая идея, чтобы выработать хорошие привычки.

Обратите большое внимание на форматирование кода и читабельность. Задумайтесь над именами классов, методов и переменных. Вам нужно меньше комментариев, если имена говорят сами за себя.

Изучите и соблюдайте стандарты Java-кодирования. Это поможет удобочитаемости.

Забудьте о вводе-выводе и пользовательском интерфейсе - сначала получите функциональность.

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * CoffeePriceCalculator
 * User: mduffy
 * Date: 7/22/2016
 * Time: 7:46 AM
 * @link http://stackru.com/questions/38525213/simple-discount
 */
public class CoffeePriceCalculator {

    // Is double a good way to represent money?  What about units?  Conversions?
    public static final double DEFAULT_UNIT_PRICE = 3.75;  // British pounds

    private static final Map<Integer, Double> DISCOUNT_PERCENTAGE;

    static {
        DISCOUNT_PERCENTAGE = new LinkedHashMap<>();
        DISCOUNT_PERCENTAGE.put(10, 0.05);
        DISCOUNT_PERCENTAGE.put(20, 0.10);
    }

    public double calculatePrice(int numBags, double unitPrice) {
        if (numBags < 0) throw new IllegalArgumentException("Number of bags must be positive");
        if (unitPrice < 0.0) throw new IllegalArgumentException("Unit price must be positive");
        double price = numBags*unitPrice;
        price -= calculateDiscount(numBags, price);
        return price;
    }

    public double calculatePrice(int numBags) {
        return this.calculatePrice(numBags, DEFAULT_UNIT_PRICE);
    }

    public double calculateDiscount(int numBags, double price) {
        if (numBags < 0) throw new IllegalArgumentException("Number of bags must be positive");
        if (price < 0.0) throw new IllegalArgumentException("Total price must be positive");
        double discount = 0.0;
        for (int minBags : DISCOUNT_PERCENTAGE.keySet()) {
            if (numBags >= minBags) {
                discount = price*DISCOUNT_PERCENTAGE.get(minBags);
                break;
            }
        }
        return discount;
    }
}

Еще не рано узнавать о JUnit и Test Driven Development.

import org.junit.Assert;
import org.junit.Test;

/**
 * Junit test for CoffeePriceCalculator
 * User: mduffy
 * Date: 7/22/2016
 * Time: 7:50 AM
 * @link http://stackru.com/questions/38525213/simple-discount
 */
public class CoffeePriceCalculatorTest {

    public static final double TOLERANCE = 1.0e-3;

    @Test
    public void testCalculatePrice_NoDiscount() {
        // setup
        CoffeePriceCalculator coffeePriceCalculator = new CoffeePriceCalculator();
        int numBags = 5;
        // exercise
        double actual = coffeePriceCalculator.calculatePrice(numBags);
        // assert
        Assert.assertEquals(numBags * CoffeePriceCalculator.DEFAULT_UNIT_PRICE, actual, TOLERANCE);
    }

    @Test
    public void testCalculatorPrice_LowDiscount() {
        // setup
        CoffeePriceCalculator coffeePriceCalculator = new CoffeePriceCalculator();
        int numBags = 15;
        // exercise
        double actual = coffeePriceCalculator.calculatePrice(numBags);
        // assert
        Assert.assertEquals(numBags * CoffeePriceCalculator.DEFAULT_UNIT_PRICE*0.95, actual, TOLERANCE);
    }

    @Test
    public void testCalculatorPrice_HighDiscount() {
        // setup
        CoffeePriceCalculator coffeePriceCalculator = new CoffeePriceCalculator();
        int numBags = 25;
        // exercise
        double actual = coffeePriceCalculator.calculatePrice(numBags);
        // assert
        Assert.assertEquals(numBags * CoffeePriceCalculator.DEFAULT_UNIT_PRICE*0.90, actual, TOLERANCE);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testCalculatePrice_NegativeBags() {
        // setup
        CoffeePriceCalculator coffeePriceCalculator = new CoffeePriceCalculator();
        int numBags = -25;
        // exercise
        coffeePriceCalculator.calculatePrice(numBags);
    }
}

Надеюсь, ваш экзамен не появится слишком рано, потому что у вас есть много синтаксиса для обзора.

Мне не очень нравится давать прямые ответы на домашние вопросы, поэтому я исправлю то, что у вас есть, и, возможно, это укажет вам правильное направление.

Import.java.util.scanner;

public class discount {
  public static void main (String[] args){

    //Scanner input; Keep this as one line. It is good practice
    Scanner input = new Scanner(System.in);
    //Float bag;
   int bag;
    Float discount;
    Double cost = 3.75;

    //Input = new Scanner(System.ini);     combined with line above.
    System.out.println("Enter Numer of bag");
    bag = input.nextFloat();
    //If (bag ==>10&&<20) × .05  incorrect Java syntax

    //if(bag >= 10 && < 20) {
    if(bag >= 10 && bag < 20) {
     discount = 0.05;
    }
    else if(bag >= 20) {
      discount = 0.10;
    } 
    else {
      //discount = 0;
      discount = 0.0;
    }

    double finalPrice;
    finalPrice = (cost * bag) * (1 - discount);

    //System.out.println("You ordered " + bag + " bags of coffee.);
    System.out.println("You ordered " + bag + " bags of coffee.");
    System.out.println("Your dicount is " + discount + "%");
    System.out.println("Your total is: " + finalPrice);
  }
}

Не забывайте содержать код в чистоте, чтобы не запутаться. Убедитесь, что вы сделали отступ для своего кода.

Подумайте о том, что вы называете ваши переменные, и не бойтесь их рефакторинга, если вы найдете что-то лучшее. Использование четких и логичных имен уменьшит количество комментариев, которые вам нужно будет написать.

И, как я упоминал ранее, изучите ваш синтаксис. В вашем коде было много синтаксических ошибок, что наводит меня на мысль, что, возможно, вы пишете свой код в блокноте или из командной строки? Если это так, я бы рекомендовал использовать IDE, такую ​​как IntelliJ, NetBeans или Eclipse. Это подчеркнет ваши синтаксические ошибки и укажет на ошибки, которые вы можете не заметить сразу.

Другие вопросы по тегам