如何为我在Java程序中输入的值创建占位符?

时间:2013-09-13 20:42:23

标签: java for-loop java.util.scanner

我正在尝试回答以下问题:以下伪代码描述了书店如何根据总价格和订购的书籍数量来计算订单的价格。请编写创建此代码所需的java代码。

  • 阅读书籍总价格和书籍数量。
  • 计算税金(总账面价格的7.5%)。
  • 计算运费(每本书2美元)。
  • 订单价格是总账面价格,税金和运费的总和。
  • 打印订单价格。

我是编程的新手,如果有很多错误,那就很抱歉。这是我到目前为止所做的:

package test2;
import java.util.Scanner;
public class test2 {
    public static void main (String args[]){
    Scanner inputfromscanner = new Scanner(System.in);   
    double bookprice=0, taxpercentage, shippingcharge, totalbeforetax,
    totalwithtax, totalwithshipping;
    int numbooks;

    taxpercentage = 1.075;
    shippingcharge = 2;   

    System.out.print("Please enter the number of books:");
    numbooks = inputfromscanner.nextInt();


        for(int x=0;x<=numbooks;x++){
            if( x == numbooks ) {
              break;
            }

            System.out.print("Please enter the before-tax price of the book:");
            bookprice = inputfromscanner.nextDouble();

        }
        inputfromscanner.close();
        totalbeforetax = bookprice;
        totalwithtax = totalbeforetax*taxpercentage;
        totalwithshipping = totalwithtax + (numbooks*shippingcharge);


        System.out.print("The total price of the order is: $");
        System.out.println(totalwithshipping);
    }   
}    

输出的一个例子:

Please enter the number of books:5
Please enter the before-tax price of the book:10.50
Please enter the before-tax price of the book:20.50
Please enter the before-tax price of the book:30.50
Please enter the before-tax price of the book:40.50
Please enter the before-tax price of the book:50.50
The total price of the order is: $64.2875

所以我意识到我做错了什么,但我不确定如何解决它。 “totalbeforetax = bookprice;”行不正确。这应该是输入的所有书价的总和。所以,在这个例子中,数学将是totalbeforetax = 10.50 + 20.50 + 30.50 + 40.50 + 50.50 = 152.50。发生的事情是,每当我输入一本书的价格时,它都会被我接下来输入的任何书价所覆盖。因此,当我输入40.50然后输入50.50时,40.50将被抛出,并且在计算中仅使用50.50。

我需要一种方法来独立存储这些图书价格中的每一个。我不想创建像bookprice1,bookprice2,bookprice3..etc这样的变量。因为我需要它是无数的书价。我不知道如何告诉它分别保存这些值中的每一个。也许有某种变量,我可以告诉它在变量的末尾添加1然后将它们加在一起?

另外我不确定“bookprice = 0”是做什么的。我正在使用Eclipse作为IDE,它告诉我将其更改为“= 0”。

解释数学。以下是用户输入5个图书价格的示例:

$10.50 + $20.50 + $30.50 + $40.50 + $50.50 = $152.50 (totalbeforetax)

$152.50 * 1.075 = $163.9375 (totalwithtax)

$163.9375 + ( 5 books * $2 per book shipping fee) = $173.9375 (totalwithshipping)

我认为运费不包括税费,而且运费是在问题中未明确说明之后加上的。

我的计划正在做什么:

$50.50 = $50.50 (totalbeforetax)

$50.50 * 1.075 = $54.2875 (totalwithtax)

$54.2875 + ( 5 books * $2 per book shipping fee) = $64.2975 (totalwithshipping)

我想做的其他事情是让事情看起来漂亮(看起来像小问题,但我认为有复杂的解决方案)将答案舍入到小数点后2位,但我不知道如何去做吧。因此,如果订单的总价格为64.2875美元,那么它只会显示64.29美元。 (所以我正在取消2个数字并同时对其进行舍入)

我想做的另一件事是,有时答案可能会说“订单的总价格是:65.5美元”。有没有办法在这个结尾添加零,所以它会说65.50美元?当答案在小数位后面有一个数字时,如何告诉它在 末尾添加一个零?

我希望我已经详细解释了所有内容。请问你是否有疑问。 感谢您的时间和帮助!我真的很感激!

3 个答案:

答案 0 :(得分:0)

只需初始化double totalCost = 0;然后当您阅读本书时,只需将其添加到totalCost += bookprice ;

计算taxshipping cost on totalCost

同样在你的循环中你可以使用

for(int x=0;x<numbooks;x++){......}

而不是

for(int x=0;x<=numbooks;x++){......}

答案 1 :(得分:0)

使用数组来保存单独的图书价格,并使用totalbeforetax作为运行总计。 (对于简单的totalbeforetax = bookprice;

,它无论如何都没有被充分利用
numbooks = inputfromscanner.nextInt();
double[] bookprices = new double[numbooks]; // as many prices as books

然后扫描价格并计算循环内的总数。

for(int x=0; x<numbooks;x++){
    /* if( x == numbooks ) { // removed; condition updated to "<" instead
      break;
    } */
    System.out.print("Please enter the before-tax price of the book:");
    bookprices[x] = inputfromscanner.nextDouble();
    totalbeforetax += bookprices[x];
}

通过这种方式,您可以获得总数,也可以在不需要的情况下放弃单独的书价。

答案 2 :(得分:0)

您实际上并不需要存储每本书的价格。相反,您可以在每次用户输入价格时将价格添加到totalbeforetax

for(int x=0; x<=numbooks; x++){

    if( x == numbooks ) {
        break;
    }
    System.out.print("Please enter the before-tax price of the book:");
    totalbeforetax += inputfromscanner.nextDouble();
}

这样你就可以完全摆脱bookprice变量。

至于你的其他问题......

  

另外我不确定“bookprice = 0”是做什么的。我正在使用Eclipse作为IDE,它告诉我将其更改为“= 0”。

这样做是初始化变量。 Eclipse建议这样做的原因是,大多数类型的对象都被初始化为null,直到它们被赋予了值。 doubles实际上并非如此,因为它们是'值类型',不能为空。相反,它们初始化为0.尽管习惯在定义变量时仍然习惯于初始化变量,这可能是Eclipse建议的原因。

  

我想做的另一件事是,有时答案可能会说“订单的总价格是:65.5美元”。有没有办法在这个结尾添加零,所以它会说65.50美元?如果答案在小数位后面有一个数字,我怎么能告诉它在末尾添加一个零?

您可以使用NumberFormat对象,如下所示:

NumberFormat formatter = NumberFormat.getCurrencyInstance();

System.out.print("The total price of the order is: ");
System.out.println(formatter.format(totalwithshipping));

(代码取自此处:https://stackoverflow.com/a/2379425/626796