[转载] JAVA数组实现学生成绩统计

参考链接: Java程序的输出 20(继承)

一、项目名称 数组实现学生成绩统计 二、项目描述 1.项目简介: 由用户输入学生人数与名字,并定义当前学期课程数与课程名,并分别录入每位学生每门课程成绩,系统显示输入每位学生每门课程成绩,并显示学生的总分与平均分。 2.程序要求: 1)程序运行时,显示欢迎信息,并提示输入班级学生人数,如图1。  

2)用户输入班级人数后,系统提示用户输入本学期课程数,如图2。 

3)输入学期课程数后,系统提示用户定义每门课程名, 如图3、图4、图5。 

 

 

4)所有课程名都定义完成后,系统提示输入学生姓名。如图6。 5)录入一个学生姓名后,提示录入本学期每门课程的成绩。当一个学生所有课程录入完成后,提示录入下一个学生姓名,及本学期每门课程成绩。如图7,如图8,如图9。    6)所有学生姓名与对应的每个学生本学期每门课程成绩录入完成后,系统显示打印输入录入成绩,并统计输入每位学生的课程总分与平均分。如图10。 三、说明 本程序不涉及文件数据库操作,仅利用java数组实现。 

代码实现: 

package cn.jpi.demo;

 

import java.util.Scanner;

 

import org.junit.Test;

 

public class StudentsScoreStatistics {

//    定义全局变量

    

//    班级学生名字(数组)

    static String[] studentName;

//    学期课程名(数组)

    static String[] courseName;

//    学生成绩(二维数组)

    static int[][] studentScore;

//    学生总分

    static int[] studentScoreSum;

//    学生平均分

    static double[] studentScoreAvg;

    

//    定义Object二维数组来装矩形

    static Object[][] table;

    

//    声明Scanner对象

    static Scanner sc = new Scanner(System.in);

    

    public static void main(String[] args) {

//        1.欢迎使用

        welcome();

//        2.输入班级人数,课程数,课程名以及每位同学的各门课的成绩

        print();

//        3.打印结果

        end();

    }

 

//    4.定义输出总结果方法

    private static void end() {

//        输出表头

        System.out.print("学生"+"\t");

//        遍历课程名数组

        for(String s:courseName) {

            System.out.print(s+"\t");

        }

        System.out.println("总分"+"\t"+"平均分");

//        二维数组的遍历

        for(int i = 0;i<table.length;i++) {

            for(int j = 0;j<table[i].length;j++) {

                System.out.print(table[i][j]+"\t");

            }

            System.out.println();

        }

    }

    

//    2.定义输入班级人数,课程数,课程名以及录入每位同学的各门课的成绩方法

    private static void print() {

//        输入班级人数(确定学生数组的长度)

        System.out.println("请输入班级学生人数:");

        int i  = sc.nextInt();

        studentName = new String[i];

        

//        确定学生总分数组长度

        studentScoreSum = new int[i];

        

//        确定学生平均分数组长度

        studentScoreAvg = new double[i];

        

//        输入学生课程数(确定课程数组的长度)

        System.out.println("请输入学期课程数:");

        int j  = sc.nextInt();

        courseName = new String[j];

        

//        确定学生成绩数组长度

        studentScore = new int[i][j];

        

//        确定矩阵大小

        table = new Object[i][j+3];

        

//        输入课程名字(循环)

        for(int k = 0;k<courseName.length;k++) {

            System.out.println("请定义第"+(k+1)+"门课的名字:");

            courseName[k] = sc.next();

        }

//        输入学生的姓名,并录入他的每门课的成绩(循环嵌套)

//        声明总分变量

        int sum = 0;

//        声明平均分变量

//        double avg = 0;

        for(int l = 0;l<studentName.length;l++) {

            System.out.println("请输入第"+(l+1)+"个学生的姓名:");

            studentName[l] = sc.next();

            

            for(int m = 0;m<courseName.length;m++) {

                System.out.println("请输入"+studentName[l]+"同学"+courseName[m]+"的成绩:");

                studentScore[l][m] = sc.nextInt();

                sum = sum + studentScore[l][m];

//                avg = sum/courseName.length;

            }

            studentScoreSum[l] = sum;

            studentScoreAvg[l] = sum/courseName.length;

//            sum归0,重新计算

            sum = 0;

//            System.out.println(sum+"....."+avg);

        }

//        为 表格填入数据

        for(int n = 0;n<studentName.length;n++) {

            for(int o = 0;o<courseName.length+3;o++) {

                if(o>=1 && o<=courseName.length) {

                    table[n][o] = studentScore[n][o-1];

                }else if(o==0) {

                    table[n][o] = studentName[n];

                }else if(o==courseName.length+1){

                    table[n][o] = studentScoreSum[n];

                }else {

                    table[n][o] = studentScoreAvg[n];

                }

            }

        }

    }

    

//    1.定义打印表头方法

    private static void welcome() {

        System.out.println("欢迎使用简单不简约成绩统计系统^_^");

    }

    @Test

    public void test() {

 

        }

    }

}

 

代码就不细分了(反正也是给我以后自己看的,嘻嘻) 主要讲讲做这题的过程中遇到的问题吧 我有在两个地方卡住: 

 

 一个是在给table赋值的时候,我原本想把赋值放在输入学生成绩的那个循环里面,但是要么是索引越界异常,要么是后面的值赋不上去,为null值,此时我就想到它循环的次数和我要给table赋值的长度是不一样的。 为解决这一问题,我到外面单独写一个循环去给table赋值(这个故事告诉我,不该省的代码还是老老实实的写) 

 

 

 另外一个是二维数组的问题,我看到题目要求的结果我就很清楚这里是个二维数组,我也是这么做的,但是!我在前面定义的学生成绩的数组它是一维的,而且我是在循环里面给他赋值,也就是说我对一个学生的成绩赋值完成,给下一个学生的成绩赋值,它就会把第一个学生成绩的值给覆盖掉,导致无论我输出的结果都与最后一个同学的成绩一样。 为解决这一问题,我把学生成绩改为二维数组,再将相应的地方改掉就OK了 

 

在测的时候要把(学生数>课程数,学生数=课程数,学生数<课程数)这几种情况都测一测,因为有一些细节不注意,它可能会存在索引不存在或者索引越界的问题。 

还有一个小作业就不写上来了,很容易。 

最后:面向对象面向君,不负代码不负卿。各位加油

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建立同步文件的脚本

为避免一个一个的去修改每一个服务器的配置文件&#xff0c;只需要rsync同步一下就可以搞定#!/bin/bash#rsync.shLOCAL_DIR"/opt/admin"test -n "$hosts" || hosts"xxxx xxxx"REMOTE_DIR"/opt/"RSYNC_LOG"/opt/var/log/rsync.log…

[转载] Java三元运算符示例

参考链接&#xff1a; Java中的运算符 本示例说明如何编写Java三元运算符。 这是语法 condition ? get_this_if_true : get_this_if_false Java三元运算符语法 (n > 18) ? true : false; (n true) ? 1 : 0; (n null) ? n.getValue() : 0; 1. Java三元运算符 …

shell下的进度条和最大最小平均值

进度条 C语言下的进度条参考我原来的一篇blog->进度条 1234567891011121314151617181920212223function proc() {i0 str arr(| / - \\) index0 while [ $i -le 100 ] do printf "[%-101s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}&qu…

[转载] 你真的会用 Java 中的三目运算符吗

参考链接&#xff1a; Java中的按位运算符 转载:http://blog.jobbole.com/93511/ 写在前面&#xff1a; 三目运算符是我们经常在代码中使用的&#xff0c;a (bnull?0:1); 这样一行代码可以代替一个 if-else&#xff0c;可以使代码变得清爽易读。但是&#xff0c;三目运算符也…

HTTP Keep-Alive模式

1、什么是Keep-Alive模式&#xff1f; 我们知道HTTP协议采用“请求-应答”模式&#xff0c;当使用普通模式&#xff0c;即非KeepAlive模式时&#xff0c;每个请求/应答客户和服务器都要新建一个连接&#xff0c;完成 之后立即断开连接&#xff08;HTTP协议为无连接的协议&#…

[转载] java:比较运算符

参考链接&#xff1a; Java中的new运算符 1.compareTo()方法: compareTo()方法返回的是一个int类型值. //声明的值 BigDecimal t_sell1 new BigDecimal(); BigDecimal t_sell2 new BigDecimal(); if(t_sell1.compareTo(t_sell2)0){ return "t_sell1的值等于t_sell2&…

[转载] java左移右移和无符号右移

参考链接&#xff1a; Java中的按位右移运算符 ###知识点 java的三种位移运算符&#xff1a; <<&#xff1a;左移运算符&#xff0c;num << 1,相当于num乘以2 >>&#xff1a;右移运算符&#xff0c;num >> 1,相当于num除以2 >>>&#xff1a…

Script:List OBJECT DEPENDENT

以下脚本用以列出数据库中对象的依赖性:select D_OBJ#, 本文转自maclean_007 51CTO博客&#xff0c;原文链接: http://blog.51cto.com/maclean/1276767

[转载] java避免空指针异常_第1部分:在现代Java应用程序中避免空指针异常

参考链接&#xff1a; Java的instanceof及其应用 java避免空指针异常 空做与不做 (Null do’s and don’ts) In the talk Null References: The Billion Dollar Mistake, Sir Tony Hoare describes implementing null references as a part of the ALGOL programming languag…

[转载] 什么是Java中的自动拆装箱 integer

参考链接&#xff1a; Java中autoboxing自动装箱整数对象的比较 本文主要介绍Java中的自动拆箱与自动装箱的有关知识。 1、基本数据类型 基本类型&#xff0c;或者叫做内置类型&#xff0c;是Java中不同于类(Class)的特殊类型。它们是我们编程中使用最频繁的类型。 Jav…

[转载] python常用库

参考链接&#xff1a; Python–新一代语言 转载至&#xff1a;https://www.cnblogs.com/jiangchunsheng/p/9275881.html 今天我将介绍20个属于我常用工具的Python库&#xff0c;我相信你看完之后也会觉得离不开它们。他们是&#xff1a; Requests.Kenneth Reitz写的最富盛…

linux下安装配置oracle

检查系统是否已安装所需的开发包 使用rpm -qa命令&#xff0c;确保以下包已成功安装。对于包的版本,只有版本高于下面的都可以,如果低于此版本,则要升级处理,如下: binutils-2.15.92.0.2-13.EL4 compat-db-4.1.25-9 compat-libstdc-296-2.96-132.7.2 control-center-2.8.0-12 g…

[转载] c++多态与java多态性_Java中的多态性

参考链接&#xff1a; Java中的加法和串联 c多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meaning of polymorphism is the condition of occurring in several different forms. 多态是OOPS范式的核心概念之一。 多态性的含义是以几种不…

USB peripherals can turn against their users

Turning USB peripherals into BadUSB USB devices are connected to – and in many cases even built into – virtually all computers. The interface standard conquered the world over the past two decades thanks to its versatility: Almost any computer peripheral…

[转载] JAVA条件表达式的陷阱

参考链接&#xff1a; Java条件表达式中的数字类型提升 Map<String, Integer> map new HashMap<String, Integer>(); map.put("count", null); Integer it map null ? 0 : map.get("count"); 注意&#xff1a;在第三行&#xff0c;会…

Linux系统管理初步(七)系统服务管理、chkconfig与systemd 编辑中

Linux系统本身包含了很多服务&#xff0c;CentOS6之前系统的服务用SysV控制&#xff0c;CentOS7改为systemd控制 一、chkconfig服务管理机制 简而言之&#xff0c;chkconfig就是CentOS6以前用来控制系统服务的工具&#xff0c; 常用方法举例 chkconfig --list #列出所有的系统服…

[转载] 菜鸟举例理解字节流和字符流区别

参考链接&#xff1a; Java中的字符流与字节流 Character Stream对比Byte Stream 菜鸟举例理解字节流和字符流区别 按照uft8编码方式存储文档 文档存储路径在D盘下 /** * 按照utf8格式存储文档 */ public static void storeDataByUTF8(){ String path "D:" …

[转载] Java9发布回顾Java 8的十大新特性

参考链接&#xff1a; Java中的DoubleStream mapToObj() java9已经在北京时间9月22日正式发布&#xff0c;开发者可以在oracle jdk官网上下载到最新的jdk9。 今天&#xff0c;我们先来一起复习一下2014年发布的Java 8的十大新特性。先来喝杯java~~~ 按照java升级的传统&…

窗体间传递数据

前言 做项目的时候&#xff0c;winfrom因为没有B/S的缓存机制&#xff0c;窗体间传递数据没有B/S页面传递数据那么方便&#xff0c;今天我们就说下winfrom中窗体传值的几种方式。 共有字段传递 共有字段传递实现起来很方便&#xff0c;就是在窗体类中加个共有字段属性&#xff…

[转载] c语言中检查命令行参数_C中的命令行参数

参考链接&#xff1a; Java中的命令行参数 c语言中检查命令行参数 Command line argument is a parameter supplied to the program when it is invoked. Command line argument is an important concept in C programming. It is mostly used when you need to control your …