简单折扣
Simple Discount
备考遇到问题,我是初学者。
它是一个折扣计算器。
一袋咖啡售价 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);
}
}
我通常不赞成给 Tom Sawyer 的学生做作业,但在这种情况下,我认为对于任何学会以不同方式看待问题的初学者来说,都有教育机会。
这是一个简单的class,但是如果你想成为一名程序员,养成良好的习惯是个好主意。
非常注意代码格式和可读性。仔细考虑 class 元素、方法和变量的名称。如果名称不言自明,您需要的注释就更少了。
学习并关注 Java coding standards。这将有助于提高可读性。
忘记输入和输出以及用户界面 - 首先获得正确的功能。
import java.util.LinkedHashMap;
import java.util.Map;
/**
* CoffeePriceCalculator
* User: mduffy
* Date: 7/22/2016
* Time: 7:46 AM
* @link
*/
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 和测试驱动开发并不算早。
import org.junit.Assert;
import org.junit.Test;
/**
* Junit test for CoffeePriceCalculator
* User: mduffy
* Date: 7/22/2016
* Time: 7:50 AM
* @link
*/
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。这些将强调您的语法错误并指出您可能不会立即注意到的错误。
if(bag >= 10 && < 20)
至
if(bag >= 10 && bag < 20)
初学者容易犯的错误!
在学习基础知识时,我有点同意讲师关于编辑与 ide 的看法。您需要学习阅读编译器告诉您错误的内容。一旦你知道问题所在,我想你会同意,上面的语法错误消息很好地表明了问题所在。
备考遇到问题,我是初学者。 它是一个折扣计算器。 一袋咖啡售价 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);
} }
我通常不赞成给 Tom Sawyer 的学生做作业,但在这种情况下,我认为对于任何学会以不同方式看待问题的初学者来说,都有教育机会。
这是一个简单的class,但是如果你想成为一名程序员,养成良好的习惯是个好主意。
非常注意代码格式和可读性。仔细考虑 class 元素、方法和变量的名称。如果名称不言自明,您需要的注释就更少了。
学习并关注 Java coding standards。这将有助于提高可读性。
忘记输入和输出以及用户界面 - 首先获得正确的功能。
import java.util.LinkedHashMap;
import java.util.Map;
/**
* CoffeePriceCalculator
* User: mduffy
* Date: 7/22/2016
* Time: 7:46 AM
* @link
*/
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 和测试驱动开发并不算早。
import org.junit.Assert;
import org.junit.Test;
/**
* Junit test for CoffeePriceCalculator
* User: mduffy
* Date: 7/22/2016
* Time: 7:50 AM
* @link
*/
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。这些将强调您的语法错误并指出您可能不会立即注意到的错误。
if(bag >= 10 && < 20)
至
if(bag >= 10 && bag < 20)
初学者容易犯的错误! 在学习基础知识时,我有点同意讲师关于编辑与 ide 的看法。您需要学习阅读编译器告诉您错误的内容。一旦你知道问题所在,我想你会同意,上面的语法错误消息很好地表明了问题所在。