帮助需要纠正Java代码

时间:2009-02-13 23:45:58

标签: java

我有这个,但有一个错误,我不明白:(。我对Java相对较新。

package hw;
import java.util.Scanner;

public class Problem1
{
    public static void main (String [] args)
    {
        int cost; int number; double cost_unit; double total;

        Scanner entrada = new Scanner(System.in);            

        System.out.println("Please enter the cost of the product.");
        cost = entrada.nextInt();

        while (cost>0){

            System.out.println("Please enter the amount of units to be sold");
            number = entrada.nextInt();

            if (number>0);

            cost_unit = cost * 1.4;
            total = cost_unit*number;

            System.out.printf("Cost per unit will be $ %d\n",cost_unit);
            System.out.printf("Cost per unit will be $ %d\n",total);                                
        }
    }                
}

//我只想让用户输入产品的成本,给出一些订购单位,我希望程序找出产品的最终价格,获利40%。

9 个答案:

答案 0 :(得分:2)

在printf中,%d用于有符号十进制整数,而cost_unittotal是双精度数。您应该使用%f代替。

System.out.printf("Cost per unit will be $ %f\n",cost_unit);
System.out.printf("Cost per unit will be $ %f\n",total);

答案 1 :(得分:2)

尝试并实际描述问题:

javac没有编译吗?这是一个语法问题。

程序的行为是否与您的预期不符?哪些部分没有表现?这是一个逻辑问题。

如果没有充分描述问题,您怎么能指望您或其他人轻易找到错误?当你继续学习有关编程的更多知识时,你将需要这种技能。

回到代码中查找问题:

  • 单个项目的成本是整数。如果我想卖掉0.75美分的口香糖
  • ,那就没有意义了
  • 如果您为成本
  • 输入除0以外的任何内容,则while循环将无限循环
  • 如果条件不起作用...即,您输入0或更少单位或超过0单位没有区别
  • cost_unit = cost * 14您可能希望将cost_unit命名为retail_unit,因为这是零售价格。成本*利润率=零售价,没有?

答案 2 :(得分:1)

一些提示:

while (cost>0)

你真的想要一个while循环吗?您似乎正在检查,如果费用为正。

if (number>0);

if语句没有任何用处。

答案 3 :(得分:1)

似乎是“if(number> 0);”声明无济于事。

尝试将其更改为:

if (number>0) {
  cost_unit = cost * 1.4;
  total = cost_unit*number;

  System.out.printf("Cost per unit will be $ %d\n",cost_unit);
  System.out.printf("Cost per unit will be $ %d\n",total);
}

编辑:此外,如果指定的(第一)成本是>,似乎存在无限循环。 0,因为你不在循环中改变它(成本)。

答案 4 :(得分:1)

如果不深入研究代码,引起我注意的一件事就是:

if (number>0);

cost_unit = cost * 1.4;
total = cost_unit*number;

可能你会喜欢这个:

if (number>0) {
    cost_unit = cost * 1.4;
    total = cost_unit*number;
}

顺便说一句,我以前看过这个.....但我不太确定在哪里......

答案 5 :(得分:1)

变化

    if (number>0);

    cost_unit = cost * 1.4;
    total = cost_unit*number;

        if (number>0) {
        cost_unit = cost * 1.4;
        total = cost_unit*number;
        }

答案 6 :(得分:1)

如果您在打印结果时研究了documentation的格式语法,您将意识到要使用整数格式(%d)格式化为浮点数(%f) )。

答案 7 :(得分:1)

最后两行应该是:

System.out.printf("Cost per unit will be $ %f\n", cost_unit);
System.out.printf("Total cost will be $ %f\n", total);

答案 8 :(得分:1)

在这里,试试这个:

我认为它几乎可以满足您的需求。

package hw;

import java.util.Scanner;


public class Problem1 {
    public static void main (String [] args) {
        int cost;
        int number; 
        double cost_unit = 0; 
        double total = 0;

        Scanner entrada = new Scanner(System.in);

        System.out.println("Please enter the cost of the product.");
        cost = entrada.nextInt();
        System.out.println("Please enter the amount of units to be sold");
        number = entrada.nextInt();

        cost_unit = cost * 1.4;
        if (number>0) {
            total = cost_unit*number;
        }

        System.out.printf("Cost per unit will be $ %f\n",cost_unit);
        System.out.printf("Total cost will be $ %f\n",total);
    }
}

尝试一下,看看它是否有效。你有没有机会参加ITAM?

修改

关于你原来的循环是正确的。只需要包围您想要重复的代码,并添加条件退出。

创建扫描仪后的类似情况(几乎与第一次尝试时的方式相同):

 while( cost > 0 ) { 
     System.out.println("Please enter the cost of the product ( 0 to exit the progam");
     cost = entrada.nextInt();
     .........
     .........
     .........
     System.out.printf("Total cost will be $ %f\n",total)

 }

这将在大括号之间重复代码,而成本大于0。

当然你应该改变成本的初始值,否则它不会在第一次进入lopp时,也许你应该在每次迭代之前清理这些值。