【问题标题】:Marks Program Calculations?标记程序计算?
【发布时间】:2023-03-03 16:25:01
【问题描述】:

我必须制作一个标记程序来显示用户输入的一组标记和一些计算(平均值、最大值、最小值、范围等)。它还应该能够按升序对标记进行排序。我设法(在帮助下)显示标记并对它们进行排序,但我无法让程序进行计算并显示它们。这是我到目前为止的所有代码:

 ArrayList <Integer> marks = new ArrayList();

 private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
    Collections.addAll(marks, (Integer.parseInt(markInput.getText())));

    StringBuilder text = new StringBuilder();
    for (Integer mark: marks) {
    text.append(mark.toString()).append('\n');
    }

    markdisplayTextArea.setText(text.toString());
    }

 private void sortButtonActionPerformed(java.awt.event.ActionEvent evt) {
    Collections.sort(marks);

    StringBuilder text = new StringBuilder();
    for (Integer mark: marks) {
    text.append(mark.toString()).append('\n');
    }

    markdisplayTextArea.setText(text.toString());
    }

 private void analyzeButtonActionPerformed(java.awt.event.ActionEvent evt) {

    analyzeTextArea.setText("Class average:" +);
    analyzeTextArea.setText("Maximum mark:" +);
    analyzeTextArea.setText("Minimum mark:" +);
    analyzeTextArea.setText("Range of marks:" +);
    }

按下"analyze" 按钮时,计算必须显示在TextArea 中。我目前不知道如何进行计算或显示它们。任何指导将不胜感激。

【问题讨论】:

    标签: java arraylist


    【解决方案1】:

    您必须实现actionPerformed() 方法并检查是否点击了相应的按钮。

     public void actionPerformed(ActionEvent e) {
            if(e.getSource()==addButton) {
                            //do stuff
            }
            else if(e.getSource()==sortButton) {
                  // do stuff
            }
            else if(e.getSource()==analyzeButton) {
                  // do stuff
            }
        }
    

    【讨论】:

    • 我建议不要使用 if 这样的语句。至少使用else ifswitch...
    【解决方案2】:

    这是我为您的问题建议的代码...

    ArrayList<Integer> marks = new ArrayList<Integer>();
    
    // Called when the user clicks a button
    public void actionPerformed(ActionEvent e) {
        Object clickedButton = e.getSource();
        if(clickedButton == addButton) {
            addButtonActionPerformed();
        }
        else if(clickedButton == sortButton) {
            sortButtonActionPerformed();
        }
        else if(clickedButton == analyzeButton) {
            analyzeButtonActionPerformed();
        }
    }
    
     private void addButtonActionPerformed() {
        Collections.addAll(marks, (Integer.parseInt(markInput.getText())));
    
        StringBuilder text = new StringBuilder();
        for (Integer mark: marks) {
            text.append(mark.toString()).append('\n');
        }
    
        markdisplayTextArea.setText(text.toString());
    }
    
     private void sortButtonActionPerformed() {
        Collections.sort(marks);
    
        StringBuilder text = new StringBuilder();
        for (Integer mark: marks) {
            text.append(mark.toString()).append('\n');
        }
    
        markdisplayTextArea.setText(text.toString());
    }
    
    private void analyzeButtonActionPerformed() {
    
        String output = "Class average:" + calculateAverage() + "\n" +
                        "Maximum mark:" + calculateMaximum() + "\n" +
                        "Minimum mark:" + calcualteMinimum() + "\n" +
                        "Range of marks:" + calculateRange();
    
        analyzeTextArea.setText(output);
    }
    
    private int calculateAverage(){
        // calculate and return the answer
    }
    
    private int calculateMaximum(){
        // calculate and return the answer
        int maximum = 0;
        for (Integer currentMark: marks){
            if (currentMark > maximum){
                maximum = currentMark;
            }
        }
        return maximum;
    }
    
    private int calcualteMinimum(){
        // calculate and return the answer
    }
    
    private int calculateRange(){
        // calculate and return the answer
    }
    

    现在,这些是我的主要更改,以及我做出这些更改的原因...

    1. 我添加了一个actionPerformed() 方法。如果你还没有这个,它可以让你监听按钮点击。您需要为每个按钮添加一行myButton.addActionListener(this);。您可能还需要将您的public class MyClass 行更改为public class MyClass implements ActionListener,并添加一行import java.awt.event.*
    2. 我更改了您的analyzeButtonActionPerformed() 方法,以便它输出您请求的值。现在您需要在最后实现 calculate() 方法 - 我已经为您完成了其中的一个,以便为您提供总体思路。当您单击analyze 按钮时,它应该会完成所有 4 次计算并将答案放入textarea

    您为什么不看看我的更改,看看您是否可以看到他们应该做什么。尝试实施一些更改和计算方法,看看你是否可以让它工作。不要只是复制粘贴我的答案 - 一点一点地进行一些更改以查看它是如何工作的,并在出现时修复任何编译错误。

    【讨论】:

    • 是“int[] 标记”这里括号内的内容:private int calculateMaximum() 还是只是数组名称“标记”?
    • 括号中不需要任何内容​​。在calculateMaximum() 方法中,它试图使用名为marks 的变量。因为变量 marks 与此方法存在于同一个类中,所以您不需要将它包含在括号中 - 您只需在您的方法中写入单词 marks 并且 Java 知道您的意思是 ArrayList marks 在你班上的佼佼者。
    • 这很好用,感谢所有帮助!只是为了理解,什么是currentmark?另外,我不必添加 actionPerformed() 方法,因为没有它也可以正常工作。
    • 你指的是for (Integer currentMark: marks){这一行。它的作用是循环 (for) 列表 (marks) 中的每个项目,并且循环中的当前项目将具有变量名称 currentMark。因此,如果标记是20,50,10,那么在此循环中第一次currentMark 的值将是20。在循环中的第二次,currentMark 的值将是50。所以,calculateMaximum() 方法的作用是,它有一个变量maximum 保存当前最大值。它一次循环遍历每个标记1,如果是更大的值,那就是新的maximum
    • 没问题,很高兴为您提供帮助。不,以前没听说过 codecanyon。
    猜你喜欢
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多