使用 Java Swing 平均成绩 [关闭]

2024-05-03

我有一个家庭作业,我一直在编码。我以为我已经完成了,但每当我想显示平均值时,它都会在内容窗格中显示 0 的列表。

这是任务的描述。

编写一个 Swing 程序,用 a 声明一个空的成绩数组 最大长度50。一会儿实现一个JOptionPane输入框 循环以允许用户输入成绩。当用户输入 哨兵值为-1,这将表示数据输入循环结束。

输入成绩后,内容窗格应显示成绩 从最低到最高排序。编写一个循环,遍历 查找大于零 (0) 的元素的数组。保留一个 运行这些项目的计数,并将它们累积成一个大的 全部的。将总计除以输入的成绩数即可找到 平均值,并在排序列表的末尾显示平均值 成绩。使用 DecimalFormat 方法将平均值显示为 2 小数位。

/*
    Chapter 7:      Average of grades
    Programmer:     
    Date:           
    Filename:       Averages.java
    Purpose:        To use the Java Swing interface to calculate the average of up to 50 grades.
                    Average is calculated once -1 is entered as a value. The grades are then sorted
                    from lowest to highest and displayed in a content pane which also displayes the average.
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.text.DecimalFormat;

public class Averages extends JFrame
{
    //construct conponents
    static JLabel title = new JLabel("Average of Grades");
    static JTextPane textPane = new JTextPane();
    static int numberOfGrades = 0;
    static int total = 0;
    static DecimalFormat twoDigits = new DecimalFormat ("##0.00");

    //set array
    static int[] grades = new int[50];

    //create content pane
    public Container createContentPane()
    {
        //create JTextPane and center panel
        JPanel northPanel = new JPanel();
        northPanel.setLayout(new FlowLayout());
        northPanel.add(title);

        JPanel centerPanel = new JPanel();
        textPane = addTextToPane();
        JScrollPane scrollPane = new JScrollPane(textPane);
            scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scrollPane.setPreferredSize(new Dimension(500,200));
        centerPanel.add(scrollPane);

        //create Container and set attributes
        Container c = getContentPane();
            c.setLayout(new BorderLayout(10,10));
            c.add(northPanel,BorderLayout.NORTH);
            c.add(centerPanel,BorderLayout.CENTER);

        return c;
    }

    //method to add new text to JTextPane
    public static JTextPane addTextToPane()
    {
        Document doc = textPane.getDocument();
        try
        {
            // clear previous text
            doc.remove(0,doc.getLength());

            //insert title
            doc.insertString(0,"Grades\n",textPane.getStyle("large"));

            //insert grades and calculate average
            for(int j=0; j<grades.length; j++)
            {
                doc.insertString(doc.getLength(), grades[j] + "\n", textPane.getStyle("large"));
            }
        }
        catch(BadLocationException ble)
        {
            System.err.println("Couldn't insert text");
        }

        return textPane;
    }

    //method to sort array
    public void grades(int grdArray[])
    {
        //sort int array
        for (int pass = 1; pass<grdArray.length; pass++)
        {
            for (int element = 0; element<grdArray.length -1; element++)
            {
                swap(grades, element, element + 1);

            }
        }
            addTextToPane();

    }


    //method to swap elements of array
    public void swap(int swapArray[], int first, int second)
    {
        int hold;
        hold = swapArray[first];
        swapArray[first] = swapArray[second];
        swapArray[second] = hold;
    }

    //execute method at run time
    public static void main(String args[])
    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        Averages f = new Averages();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        //accept first grade
        int integerInput = Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter a grade (0-100) or -1 to calculate the average"));

        //while loop accepts more grades, keeps count, and calulates the total
        int count = 0;
        int[] grades = new int[50];
        int num = 0;
        while (count<50 && num!= -1)
        {
            num = Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter a grade (0-100) or -1 to calculate the average" + (count+1)));
            if(num!=-1)
                grades[count] = num;
            count++;

        }

        //create content pane
        f.setContentPane(f.createContentPane());
        f.setSize(600,375);
        f.setVisible(true);


    }
}

请分解问题。

从统计数据开始:

/**
 * Statistics
 * @author Michael
 * @link http://stackoverflow.com/questions/15626262/averaging-grades-using-java-swing?noredirect=1#comment22167503_15626262
 * @since 3/25/13 7:50 PM
 */
public class Statistics {
    public static double getAverage(int numValues, int [] values) {
        double average = 0.0;
        if ((values != null) && (numValues > 0) && (values.length >= numValues)) {
            for (int i = 0; i < numValues; ++i) {
                average += values[i];
            }
            average /= numValues;
        }
        return average;
    }
}

接下来,我建议您暂时将 Swing 完全排除在外。制作纯文本输入/输出 UI。

import java.util.Scanner;



/**
 * StatisticsDriver
 * @author Michael
 * @link http://stackoverflow.com/questions/15626262/averaging-grades-using-java-swing?noredirect=1#comment22167503_15626262
 * @since 3/25/13 7:50 PM
 */
public class StatisticsDriver {
    public static final int MAX_VALUES = 50;

    public static void main(String [] args) {
        int [] values = new int[MAX_VALUES];
        Scanner scanner = new Scanner(System.in);
        boolean getAnotherValue;
        int numValues = 0;
        do {
            System.out.print("next value: ");
            String input = scanner.nextLine();
            if (input != null) {
                values[numValues++] = Integer.valueOf(input.trim());
            }
            System.out.print("another? [y/n]: ");
            input = scanner.nextLine();
            getAnotherValue = "y".equalsIgnoreCase(input);
        } while (getAnotherValue);
        System.out.println(Statistics.getAverage(numValues, values));
    }
}

现在您已经有了这些,请将您的注意力转向 Swing。

太多的年轻程序员在解决问题之前就陷入了 Swing 的困境。不要犯这样的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java Swing 平均成绩 [关闭] 的相关文章

随机推荐

  • 在matlab中设置图例符号的精度

    我有这个 leg2 strcat Max Degree num2str adet 1 1 ch l leg3 strcat Min Degree num2str adet 1 2 ch l leg4 strcat Max Request n
  • gem install libv8 --version '3.11.8.17' on ruby​​ (windows)

    问题如下 Error installing libv8 ERROR Failed to build gem native extension D Ruby193 bin ruby exe extconf rb creating Makefi
  • 如何使用 Scala 调度获取 301 重定向中返回的 URL?

    我正在使用斯卡拉dispatch http dispatch databinder net Dispatch htmlHTTP 库 版本 0 10 1 我向返回 HTTP 301 永久重定向的 URL 发出请求 例如 http wikipe
  • 实体框架Remove与EntityState.Deleted

    这两种说法有什么区别 两者都应该删除一个实体 context Entry new Schoolyear Id schoolyearId State EntityState Deleted context Schoolyears Remove
  • SQLite 参数 - 不允许表名作为参数

    我正在通过 Flex 在 AIR 中开发一个应用程序 但我没有发现 SQLite 出了什么问题 我习惯了 MySQL 参数有效 但仅在某些情况下有效 这是内置的针对sql注入的卫生系统的一部分吗 谢谢你的帮助 Works sqlite IN
  • 隐式意图和显式意图之间的区别[重复]

    这个问题在这里已经有答案了 我对之间的区别感到困惑implicit and explicit意图 隐式意图和显式意图的目的是什么 为什么使用这些概念 我是 Android 应用程序的新手 所以请提供一些示例 隐式活动调用 使用意图过滤器 您
  • 在.Net中使用ObjectCache缓存对象并设置过期时间

    我陷入了一个场景 我的代码如下 更新 它不是关于如何使用数据缓存 我已经在使用它及其工作 它是关于扩展它 以便该方法在到期时间和从外部源获取新数据之间不会进行调用 object string this GetDataFromCache ca
  • 用圆形减去(遮盖掉?)路径

    我正在使用 Spark Path 在 Flex 中绘制一条路径 我想从这条路径中减去一个圆形 如下图所示 道路又黑又宽 有任何想法吗 我尝试使用 Shape 对象创建蒙版 但无法完全创建其中有圆孔的蒙版 找到了 不涉及口罩 我拿了Path并
  • 有没有办法从 UTF-8 编码的文件中删除 BOM?

    有没有办法从 UTF 8 编码的文件中删除 BOM 我知道我所有的 JSON 文件都是以 UTF 8 编码的 但是编辑 JSON 文件的数据录入人员将其保存为带 BOM 的 UTF 8 当我运行 Ruby 脚本来解析 JSON 时 它失败并
  • JQuery 可拖动图像并保存位置

    好吧 这变得很尴尬 已经搜索并尝试了大约 5 个小时 但我只是在兜圈子 场景很简单 它是用户个人资料的标题图像 可以将其拖动到某个位置 然后将图像的顶部位置保存到数据库中 感谢 Beetroot Beetroot 的 遏制 父级 我开始关注
  • JavaScript 有内置的 stringbuilder 类吗?

    I see a few 代码项目解决方案 http www codeproject com KB scripting stringbuilder aspx 但是JavaScript中有常规的实现吗 如果您必须为 Internet Explo
  • asp.net 保护图像免受其他用户的静态请求?

    我在一个为每个特定用户生成动态图像的网站上工作 有时这些图像包含非常敏感数据的描述 最近 我们开始看到对属于不同用户的图像的请求 其形式为 http myapp images someuid image1 jpg http myapp im
  • PHP IMAP 解码消息

    我有通过 Base64 编码和 8 位编码发送的电子邮件 我想知道如何使用 imap fetchstruct 检查消息的编码 已经这样做了大约两个小时 所以丢失了 然后正确解码 Gmail 和 Mailbox iOS 上的应用程序 将其作为
  • HttpParams 在 Angular 中不起作用,出现 502 错误

    我用的是角度8 我在用HttpParams通过以下方式将数据发送到服务器Post method 我正进入 状态502状态码错误 通过HttpPrams发送数据 ERROR HttpErrorResponse 标头 HttpHeaders 状
  • MongoDB 和 upsert 问题

    我有两个模型 1 资源假期 Id private String resourceID private List
  • ANEW 字典可以用于 Quanteda 中的情感分析吗?

    我正在尝试找到一种方法来实施英语单词情感规范 荷兰语 以便使用 Quanteda 进行纵向情感分析 我最终想要的是每年的 平均情绪 以显示任何纵向趋势 在数据集中 所有单词均由 64 名编码员按照 7 分李克特量表在四个类别上进行评分 这提
  • Google Universal Analytics - 命令被忽略

    我正在使用 Google Universal Analytics 来跟踪页面浏览量 当我导航到具有 Google Analytics 网站实时功能的页面时 我可以看到 因此我的代码一定可以正常工作 然而 Chrome 一直在控制台中显示 I
  • 带有 Angular2 和 Typescript 的 Visual Studio 2013

    我在用着angular2 快速入门 https angular io docs ts latest quickstart html我遇到了 Visual Studio 无法识别的问题Angular2 with 打字稿导入模块 其余一切都很好
  • Razor 模板中的特殊字符未正确编码

    我用 ASP NET Core MVC 做了一些测试 我试图表现出像 这样的特殊字符 但显示为 示例 创建新视图并放置 div div 默认情况下 cshtml文件以 UTF 16 编码 HTTP 响应标头中的字符集是 UTF 8 在 la
  • 使用 Java Swing 平均成绩 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个家庭作业 我一直在编码 我以