Java实现appendToPersonArr方法:将用户输入追加到私有Person数组
Course类Person数组追加功能实现方案
核心实现步骤
- 解析用户输入字符串,转换为
Person对象数组 - 实现
appendToPersonArr方法,完成私有数组的追加逻辑 - 配套输入处理和打印方法,验证功能正确性
1. 先定义Person类
需要基础的属性、构造方法和toString方法,方便后续创建对象和打印:
public class Person { private int id; private String firstName; private String lastName; public Person(int id, String firstName, String lastName) { this.id = id; this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return "ID: " + id + ", 姓名: " + firstName + " " + lastName; } // 可选:如果需要单独访问属性,添加getter方法 public int getId() { return id; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } }
2. Course类完整实现
包含私有数组、输入解析、追加方法和打印方法:
import java.util.Scanner; public class Course { // 初始化为空数组,避免空指针问题 private Person[] teachAsst = new Person[0]; private Person[] students = new Person[0]; // 核心追加方法:srcArr是要追加的数组,mode指定目标(1=助教,2=学生) public void appendToPersonArr(Person[] srcArr, int mode) { if (srcArr == null || srcArr.length == 0) { return; // 空数组直接返回,不做无效操作 } Person[] targetArr; // 根据mode确定要追加的目标数组 if (mode == 1) { targetArr = teachAsst; } else if (mode == 2) { targetArr = students; } else { System.out.println("mode参数无效,仅支持1(助教)或2(学生)"); return; } // 创建新数组,长度为原数组+待追加数组的长度 Person[] newArr = new Person[targetArr.length + srcArr.length]; // 复制原数组元素到新数组 System.arraycopy(targetArr, 0, newArr, 0, targetArr.length); // 复制待追加数组元素到新数组末尾 System.arraycopy(srcArr, 0, newArr, targetArr.length, srcArr.length); // 更新私有数组引用 if (mode == 1) { teachAsst = newArr; } else { students = newArr; } } // 处理用户输入,转换为Person数组 public Person[] parseInputToPersonArr() { Scanner scanner = new Scanner(System.in); System.out.println("请输入人员信息(格式:id, 名, 姓; id, 名, 姓;…):"); String input = scanner.nextLine().trim(); if (input.isEmpty()) { return new Person[0]; } // 分号分割每个Person的字符串 String[] personStrs = input.split(";"); Person[] tempPersons = new Person[personStrs.length]; for (int i = 0; i < personStrs.length; i++) { // 逗号分割属性,同时去除前后空格 String[] attrs = personStrs[i].trim().split(","); if (attrs.length != 3) { System.out.println("第" + (i+1) + "条人员信息格式错误,跳过"); tempPersons[i] = null; continue; } try { int id = Integer.parseInt(attrs[0].trim()); String firstName = attrs[1].trim(); String lastName = attrs[2].trim(); tempPersons[i] = new Person(id, firstName, lastName); } catch (NumberFormatException e) { System.out.println("第" + (i+1) + "条人员信息的ID格式错误,跳过"); tempPersons[i] = null; } } // 过滤掉格式错误的null元素 int validCount = 0; for (Person p : tempPersons) { if (p != null) validCount++; } Person[] validPersons = new Person[validCount]; int index = 0; for (Person p : tempPersons) { if (p != null) { validPersons[index++] = p; } } return validPersons; } // 打印助教列表 public void printTeachAssts() { System.out.println("=== 助教列表 ==="); for (Person p : teachAsst) { System.out.println(p); } } // 打印学生列表 public void printStudents() { System.out.println("=== 学生列表 ==="); for (Person p : students) { System.out.println(p); } } }
3. 测试类验证功能
用主类测试输入、追加和打印流程:
public class TestCourse { public static void main(String[] args) { Course mathCourse = new Course(); // 输入助教信息并追加 Person[] tas = mathCourse.parseInputToPersonArr(); mathCourse.appendToPersonArr(tas, 1); mathCourse.printTeachAssts(); // 输入学生信息并追加 Person[] students = mathCourse.parseInputToPersonArr(); mathCourse.appendToPersonArr(students, 2); mathCourse.printStudents(); } }
关键注意点
- 初始数组设为空数组
new Person[0],避免后续操作出现空指针异常 - 用
System.arraycopy复制数组,比手动循环更高效简洁 - 输入解析时做了格式校验和错误处理,防止非法输入导致程序崩溃
- 通过mode参数区分助教和学生数组,复用同一套追加逻辑
内容的提问来源于stack exchange,提问作者z.....k
相关产品推荐
相关产品推荐

