2016-07-22 3 views
0

Обучение на экзамене и проблема, я новичок. Его калькулятор скидок. мешок кофе стоит € 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); 

}}

+10

Я предлагаю вам использовать базовый синтаксис Java, pronto. –

+0

Это недопустимо Java. – duffymo

+0

Вы используете IDE? В коде отсутствует LOT базового синтаксиса. –

ответ

2

if(bag >= 10 && < 20)

в

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

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

2

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

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

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

Узнать и следовать Java coding standards. Это поможет читаемости.

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

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

/** 
* CoffeePriceCalculator 
* User: mduffy 
* Date: 7/22/2016 
* Time: 7:46 AM 
* @link http://stackoverflow.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://stackoverflow.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); 
    } 
} 
0

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

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

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. Они будут подчеркивать ваши синтаксические ошибки и указывать на ошибки, которые вы не заметите сразу.

+0

Спасибо, мой экзамен не до конца августа, я не использовал ide.I am now.Me лекции сказал мне сначала использовать блокнот и делал так. –

+0

Это единственная ошибка, которую я получаю сейчас? Исключение в потоке «main» java.lang.Error: нерешенные проблемы компиляции: \t Оператор && не определен для типов аргументов boolean, int \t Ошибка синтаксиса на токене «<», удалить этот токен –

+0

См. Отредактированный код для большего количества изменений. Я также хотел бы указать, что ваша строка 'System.out.println (« Ваш dicount есть »+ скидка +«% »);' неверна. Ваш клиент получает скидку 5%, но эта строка говорит ему, что он получил скидку 0,05%. –