学生成绩程序:向二维数组添加用户数据的问题
解决Student Grades程序中二维数组重复添加数据的问题
嘿,看来你在给Student Grades程序添加学生数据时遇到了重复问题,我来帮你理清问题根源并解决它!
问题根源分析
你遇到的"重复添加相同数据15次"的问题,大概率是因为每次循环都在复用同一个存储单条学生数据的容器(比如一维数组、列表),而不是为每个学生创建新的容器。因为数组/列表属于引用类型,当你把它添加到二维数组时,实际上是把它的内存地址存了进去——如果一直用同一个容器,最后二维数组里的所有元素都会指向同一个内存空间,自然全是重复的数据。
解决方案步骤
要解决这个问题,核心就是为每个学生单独创建新的数据容器,然后填充对应的数据,再添加到二维数组里。具体步骤如下:
- 在循环的每一次迭代中,创建一个新的一维数组(或列表)来存储当前学生的姓名和4门成绩
- 为这个新容器填充该学生的专属数据(可以是手动输入、从文件读取,或者模拟生成)
- 将这个新容器添加到二维数组中
具体代码示例
下面用两种常见语言举例,你可以对应自己使用的语言调整:
Java 示例
错误写法(导致重复)
String[] studentData = new String[5]; // 只创建了一次数组 String[][] classGrades = new String[15][5]; for (int i = 0; i < 15; i++) { // 每次都修改同一个数组的值,然后重复添加 studentData[0] = "Jeremy Folson"; studentData[1] = "85"; studentData[2] = "99"; studentData[3] = "33"; studentData[4] = "44"; classGrades[i] = studentData; }
正确写法
String[][] classGrades = new String[15][5]; for (int i = 0; i < 15; i++) { // 每次循环都新建一个一维数组,保证每个学生的数据容器独立 String[] studentData = new String[5]; // 这里替换为获取真实学生数据的逻辑,比如读取输入、数据库查询 // 示例:生成不同的模拟数据 studentData[0] = "Student " + (i + 1); studentData[1] = String.valueOf(75 + i); studentData[2] = String.valueOf(82 + i); studentData[3] = String.valueOf(68 + i); studentData[4] = String.valueOf(91 + i); classGrades[i] = studentData; }
Python 示例
错误写法(导致重复)
student_data = ["Jeremy Folson", "85", "99", "33", "44"] class_grades = [] for _ in range(15): # 重复添加同一个列表的引用 class_grades.append(student_data)
正确写法
class_grades = [] for i in range(15): # 每次循环创建新的列表,存储当前学生数据 student_data = [ f"Student {i+1}", str(70 + i), str(85 + i), str(65 + i), str(90 + i) ] class_grades.append(student_data)
额外验证建议
添加完数据后,你可以通过循环遍历二维数组并打印每一行,来确认每个学生的数据都是唯一的:
// Java 验证代码 for (String[] student : classGrades) { System.out.println(String.join(", ", student)); }
# Python 验证代码 for student in class_grades: print(", ".join(student))
内容的提问来源于stack exchange,提问作者Tawfek A
相关产品推荐
相关产品推荐

