怎么解决这个程序?

时间:2014-11-03 03:23:39

标签: java if-statement

我找到了这个Java练习:

创建一个具有TotalSales(double),Commission(double)的Sales类, Commissi onRate(double)和NoOfItems(整数)。

编写一个java应用程序,要求用户输入总销售额和项目数,然后计算佣金并打印出来。 佣金率应如下:

条件:

小于500,佣金率为0

大于或等于500或项目数> = 5,佣金率为5%。

格兰特等于或等于1000或项目数> = 10,佣金率为10%

...

我写了这段代码:


主类:

import java.util.Scanner;

public class testSales {

    public static void main(String[] args) {
        Sales s1 = new Sales();
        Scanner get = new Scanner(System.in);
        System.out.println("Enter total Sales");
        s1.totalSale = get.nextDouble();
        System.out.println("Enter number of Items");
        s1.NoOfItems = get.nextInt();

        if(s1.totalSale < 500){
            s1.commission = s1.commissionRate = 0;
        }
        else if(s1.totalSale >= 500 && s1.totalSale <= 999 || s1.NoOfItems >= 5 && s1.NoOfItems <=9){
            s1.commission = s1.commissionRate = s1.totalSale * 5 / 100;
        }else if(s1.totalSale >= 1000 || s1.NoOfItems >=10) {
            s1.commission = s1.commissionRate = s1.totalSale *10/100;
        }
        System.out.println(s1.commission);

    }           
}

2 个答案:

答案 0 :(得分:4)

代码中的一个问题是NoOfItems&gt; 5但总销售额&lt; 500.对于这种情况,佣金将被错误地设置为0,因为第一个if语句会吃掉它。

请尝试更具体地解决您的问题。 “这不起作用,我不知道为什么”不容易帮助。

答案 1 :(得分:0)

除了HedonicHedgehog提出的观点之外,还有其他一些事情需要考虑:

销售类只有两个全局变量,对应于用户输入的信息。另外两个字段,佣金和佣金率,是计算值。因此,无需为它们创建变量。只需添加返回这些值的sales类访问器方法(getters)即可。例如,下面是我的getCommission()方法:

public double getCommission()
{
    return totalSales * getCommissionRate();
}

当然,您可以看到此方法依赖于getCommissionRate()方法。因为您对总项目的要求存在差距,我暂时忽略了它:

public double getCommissionRate()
{
    if (totalSales < 500)
        return 0;
    if(totalSales < 1000)
        return .05;
    else
        return 0.1;
}

或者,您可以创建一个LOCAL commission变量,并在返回之前设置该值。限制变量范围是一种很好的编程习惯。在这种情况下,没有充分理由拥有全局commissioncommissionRate变量。

最后,您的测试类被简化了,因为您需要做的就是提示用户输入两个必需的字段,它只是吐出输出,因为Sales类提供了计算其余部分所需的计算:

public static void main(String[] args)
{
    Sales s1 = new Sales();

    Scanner input = new Scanner(System.in);
    System.out.print("Enter total Sales");
    s1.setTotalSales(input.nextDouble());

    System.out.print("Enter number of Items: ");
    s1.setNumOfItems(input.nextInt());

    System.out.printf("$%.2f", s1.getCommission());
    input.close();
}

我使用printf()方法格式化输出字符串。以下是一个示例运行:

Enter total Sales: 503.45
Enter number of Items: 5
$25.17

Enter total Sales: 1003.67
Enter number of Items: 19
$100.37

Enter total Sales: 45.00
Enter number of Items: 19
$0.00

请记住,由于已经提到的原因,此示例忽略了项目数。一旦你弄清楚需要做些什么来弥补需求中的差距,你可以修改这个代码来完成剩下的工作。还要记住,Sales类只需要两个字段:totalSales和numOfItems。计算组件的另一个(佣金和佣金率);因此,不需要全局变量或setter方法。只是我提供的两种吸气方法。