【问题标题】:It is a question from a book that I cannot understand but somehow I wanted to know if I have coded it right这是一本我无法理解的书中的问题,但不知何故我想知道我是否编码正确
【发布时间】:2021-01-04 07:21:43
【问题描述】:

使用单下标数组解决以下问题。一家公司以佣金的形式向其销售人员付款。销售人员每周收到 200 美元,外加该周总销售额的 9%。例如,一个人在一周内的销售额为 5000 美元,收到 200 美元加上 5000 美元的 9% 或总计 650 美元。编写一个小程序(使用计数器数组),确定有多少销售人员在以下每个范围内获得了薪水(假设每个销售人员的薪水被截断为整数):

  • $200-$299
  • $300-$399
  • $400-$499
  • $500-$599
  • $600-$699
  • $700-$799
  • $800-$899
  • $900-$999
  • 1000 美元及以上

applet 应该使用第 6 章介绍的 GUI 技术。在 JTextArea 中显示结果。使用 JTextArea 方法 setText 更新用户输入的每个值的结果。

这就是问题所在,现在我想知道我是否做对了,因为没有人会从书中纠正我。

public class ArrayExercise {

    static final int salaryPerWeek = 200;
    static final double commission = 0.09;
    static int[] grossIncome= { 200, 300, 400, 500, 600, 700, 800, 900, 1000 };

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        JTextArea outputArea = new JTextArea();
        outputArea.setText("Salesperson income for the past week :\n");
        frame.add(outputArea);

        for ( int counter = 0; counter < grossIncome.length; counter++) {
            outputArea.append("\nSalesperson[" + counter + "] = " + calculate( grossIncome[ counter ]));
        }

        frame.setLayout(new FlowLayout());
        frame.setVisible(true);
        frame.setSize(300, 300);
    }

    public static double calculate( int salary ) {
        double total = 0;
        total = salary * commission + salaryPerWeek;
        return  total;
    }
}

输出如下:

Salesperson[0] = 218.0
Salesperson[1] = 227.0
Salesperson[2] = 236.0
Salesperson[3] = 245.0
Salesperson[4] = 254.0
Salesperson[5] = 263.0
Salesperson[6] = 272.0
Salesperson[7] = 281.0
Salesperson[8] = 290.0

对不起,我是新来的,我真的很想学习 Java。请多多包涵。

【问题讨论】:

  • 你还有一本教小程序的书吗?来自小程序的支持已被放弃。你的书涵盖了哪个版本的 Java?什么时候发布的?另外:不,您的问题是关于小程序的,您的代码不是
  • 抱歉,这是一个小程序,但我已将其编码为正常的 java 问题。请忽略小程序的事情并解决问题,如果我已经解决了问题
  • 说真的:学习旧版本的语言毫无意义。这本书是什么版本?另外:我认为你的计算很遥远。只需尝试在评估中提供给您的数字,您就会看到
  • @Stultuske 我不会说这毫无意义; Java 的基础知识与 Java 1.0 中的基本相同。是的,应该避免使用小程序,但 Hao 似乎已经在这样做了。
  • @VGR 的重点是,为什么要开始学习 Java 6(或更旧的风格)代码并首先尝试“掌握”它?

标签: java


【解决方案1】:

我认为你没有正确理解这个问题。您缺少一个额外的输入:每个销售人员的销售数据列表。您需要一个包含销售员销售额的额外输入列表,并为每个收入计算薪水并将 1 加到销售员列表中的相应元素。

input : 5000
salary: 650
Salesperson[4]= +1

Salesperson[4] 代表 600 到 699 之间的薪水。所以您必须将每个范围内的薪水数相加,而不是薪水本身。

顺便说一句:用旧版本学习java基础是没有问题的。如今,许多开发人员都尝试使用 lambda 和流来编写所有内容,但这并不总是对代码的可读性或可维护性有很大帮助。如果你从 for 循环和 if 块开始,你会更好地理解这门语言。祝你好运。

【讨论】:

    【解决方案2】:

    问题描述给你提示:

    (使用计数器数组)

    你的数组大小合适,但它不应该包含金额,它应该包含每个工资范围内的人数。

    private int[] countsForEachSalaryRange = new int[9];
    
    • 该数组的第一个元素是收入为 200-299 美元的销售人员的数量。
    • 该数组的第二个元素是收到 300 至 399 美元的销售人员数量。
    • 该数组的第三个元素是收到 400 至 499 美元的销售人员数量。
    • 等等。

    当没有进行显式初始化时,新的int[] 会自动填充零值,这就是您在这种情况下想要的。

    您的程序应该为用户提供输入多个金额的方法。每个金额将是销售人员的总销售额。在问题描述的示例中,5000 就是这样的总销售额之一。

    执行此操作的一种方法是将 JTextField 添加到您的 JFrame,用户可以在其中键入总销售额。向该 JTextField 添加一个 ActionListener,它将字段的文本解析为整数。

    如果解析成功,则需要分析整数值,即销售总额。

    分析总销售额的一种简单方法是从总销售额计算薪水,然后编写一系列 if/else 语句来检查薪水是否在每个可能的范围内。每个 if 语句的主体都应增加 countsForEachSalaryRange 的不同元素。

    每次分析完成时,清除您的 outputArea 并使用当前的计数数组设置其文本。

    【讨论】:

    • 谢谢,我认为这确实是问题所在,我必须将销售人员放在他/她的总收入范围内。例如,他的总收入在 200-299 之间。我应该将他放在 element[0] 上并显示有多少销售人员属于该范围。我的理解对吗?
    • 我认为这是正确的,是的。如果“把他放在元素[0]上”你的意思是给元素[0]加1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2021-05-25
    • 2023-02-03
    • 1970-01-01
    • 2021-09-27
    • 2021-11-01
    相关资源
    最近更新 更多