如果我是一个编程很厉害的人就好了 2023-10-16 12:12 采纳率: 63.6%
浏览 5
已结题

类与封装,数组越界怎么改

求解,不知道自己哪里数组越界
【问题描述】P84 题目2
【输入形式】键盘输入学生人数,再依次输入这些学生的相关信息,包括姓名、年级、选课数,以及这几门所选课程的名称、学分信息。具体格式见样例。
【输出形式】依次输出所有学生的相关信息,包括学生姓名、年级,此学生所选选课的名称、学分,以及总学分数。具体格式见样例。

【样例输入】

input student count:2

input no 1 student name:Lucy

input no 1 student grade:2

input no 1 student course count:2

input no 1 course name:C

input no 1 course hour:2

input no 2 course name:DS

input no 2 course hour:3

input no 2 student name:Hellen

input no 2 student grade:3

input no 2 student course count:3

input no 1 course name:Java

input no 1 course hour:3

input no 2 course name:linux

input no 2 course hour:2

input no 3 course name:html

input no 3 course hour:2


【样例输出】

no 1 student information:

Lucy 2 grade

courses:

(1)C:2 hour

(2)DS:3 hour

hours:5


no 2 student information:

Hellen 3 grade

courses:

(1)Java:3 hour

(2)linux:2 hour

(3)html:2 hour

hours:7

【样例说明】
【评分标准】要求编写学生类Student、课程类Course和客户端类Client。学生类Student、课程类Course中应有合理的构造方法和数据成员的访问接口,编写学生类Student的getHours()方法,计算学生选课的总学分;编写学生类Student的ShowMessage()方法,打印输出学生信息(姓名、年龄、所有选课的名称、学分及总学分);编写测试类,在控制台输入课程和学生信息,并打印出这些学生的选课信息。
代码如下:

import java.util.Arrays;
import java.util.Scanner;
public class Test {
public static  class Student {
         String name;
         String grade;
        Course[] num;



        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getGrade() {
            return grade;
        }
        public void setGrade(String grade) {
            this.grade = grade;
        }
        public Course[] getNum() {
            return num;
        }
        public void setNum(Course[] num) {
            this.num = num;
        }

        public Student(String name, String grade, Course[] num) {
            super();
            this.name = name;
            this.grade = grade;
            this.num = num;
        }

    
        @Override
        public String toString() {
            return name +grade+ " grade "+"\n"+"courses:"+"\n"+Arrays.toString(num);
        }
        public static class Course {
            private String name;
            private int hour;
            public Course(String name, int hour) {
                super();
                this.name = name;
                this.hour = hour;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public int getHour() {
                return hour;
            }
            public void setHour(int hour) {
                this.hour = hour;
            }
            @Override
            public String toString() {
                return "Course [name=" + name + ", hour=" + hour + "]";
            }
        }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("input student count:");
       int a=sc.nextInt();
       Student[] array=new Student[a];int i=1;  int e=0;
      for(Student arr:array) {
          System.out.println("input no "+i+" student name:");
        String name=sc.next();
         System.out.println("input no "+(i)+" student grade:");
        String grade=sc.next();
     System.out.println("input no "+(i)+" student course count:");
      int cnum=sc.nextInt();
      Course[] brr=new Course[cnum];
      for(int j=1;j<=cnum;j++){
          System.out.println("input no "+(j)+" course name:"); 
          String cname=sc.next();
          System.out.println("input no "+(j)+" course hour:"); 
          int hour =sc.nextInt();
          brr[j]=new Course(cname,hour);
      }arr=new Student(name,grade,brr);
      System.out.println("no "+i+" student information:"+"/n"+name +grade+ " grade "+"\n"+"courses:"+"\n");
      for(int k=1;k<=cnum;k++)
      {System.out.println("("+(k)+")"+brr[k].name+":"+brr[k].hour+" hour"+"\n");
    
      e+=brr[k].hour;}
      System.out.print("hours:"+e);
     i++; }       
}}
}
       
    

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-16 15:15
    关注

    【以下回答由 GPT 生成】

    对于这个问题,我的解决方案是创建一个Student类和一个Course类来封装学生和课程的数据和操作。然后在客户端程序中使用这些类来获取输入的学生和课程信息,并打印出每个学生的相关信息。

    我将使用Java来实现这个解决方案。下面是代码解释:

    首先是Student类,它具有私有属性name、grade和courses。它有一个构造函数用于初始化这些属性,还有一些方法用于获取学生的姓名、总学时和打印学生信息。

    class Student {
        private String name;
        private String grade;
        private Course[] courses;
    
        public Student(String name, String grade, Course[] courses) {
            this.name = name;
            this.grade = grade;
            this.courses = courses;
        }
    
        public String getName() {
            return name;
        }
    
        public int getTotalHours() {
            int total = 0;
            for (Course course : courses) {
                total += course.getHours();
            }
            return total;
        }
    
        public void showInformation() {
            System.out.println("Student name: " + name);
            System.out.println("Student grade: " + grade);
            System.out.println("Courses:");
            for (Course course : courses) {
                System.out.println(course.getName() + ": " + course.getHours() + " hours");
            }
            System.out.println("Total hours: " + getTotalHours());
        }
    }
    

    然后是Course类,它具有私有属性name和hours。它有一个构造函数用于初始化这些属性,还有一些方法用于获取课程的名称和学时。

    class Course {
        private String name;
        private int hours;
    
        public Course(String name, int hours) {
            this.name = name;
            this.hours = hours;
        }
    
        public String getName() {
            return name;
        }
    
        public int getHours() {
            return hours;
        }
    }
    

    最后是Client类作为客户端程序来使用Student和Course类。它会获取输入的学生人数,然后依次获取每个学生的姓名、年级和课程信息。最后,将循环遍历每个学生并打印出学生信息。

    class Client {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("Enter number of students: ");
            int studentCount = scanner.nextInt();
    
            Student[] students = new Student[studentCount];
            for (int i = 0; i < studentCount; i++) {
                System.out.println("Student No " + (i + 1) + " information:");
    
                System.out.print("Enter student name: ");
                String studentName = scanner.next();
    
                System.out.print("Enter student grade: ");
                String studentGrade = scanner.next();
    
                System.out.print("Enter number of courses: ");
                int courseCount = scanner.nextInt();
    
                Course[] courses = new Course[courseCount];
                for (int j = 0; j < courseCount; j++) {
                    System.out.println("Course No " + (j + 1) + " information:");
    
                    System.out.print("Enter course name: ");
                    String courseName = scanner.next();
    
                    System.out.print("Enter course hours: ");
                    int courseHours = scanner.nextInt();
    
                    courses[j] = new Course(courseName, courseHours);
                }
    
                students[i] = new Student(studentName, studentGrade, courses);
            }
    
            for (Student student : students) {
                student.showInformation();
                System.out.println();
            }
        }
    }
    

    在运行程序时,首先要输入学生人数,然后依次输入学生的姓名、年级等信息。然后依次输入每个学生所选课程的名称和学分信息。最后,将打印出每个学生的相关信息,包括姓名、年级、所选课程的名称和学分,以及总学分数。

    希望以上信息能够对你有所帮助,如果有任何其他问题,请随时询问。



    【相关推荐】


    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7777850
    • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 我们老师给我们花了100个星星的重要,那就是非常重要,快速排序。名字就很嚣张。。。言归正传,快排采用了分治算法。把大问题,分解成小问题。首先我们先找一个基准值,基准值的寻找法,有很多,这里我先用一个取边上值得方法,找到基准值以后呢拿着这个基准值和所有数组比较,使这个数组中比基准值小的都放左边,比基准值大的都放到右边,然后就把原来数组分成三块,中间基准值,左边都是比它小的,右边都是比它大的。然后这两个数组,继续分,一直分。直到他的终止条件,也就是小数组有序了就停止,那么什么时候有序停止呢?小区间长度为1或者长度为0的时候,就是有序了。所有小数组都有序了,那么就是整个数组有序了。只是原理,那么问题,又来了,怎么放左放右呢?我目前会三种。 部分也许能够解决你的问题。

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月9日
  • 已采纳回答 7月1日
  • 创建了问题 10月16日

悬赏问题

  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)