拆分字符串生成Person对象数组并正确输出的代码错误排查求助
问题分析与代码修正
问题排查
- 未复用拆分后的数据创建Person对象:你已经正确拆分字符串得到了
array1,但后续创建Person时用了硬编码参数,完全没用到拆分结果,违背任务要求。 - 打印对象输出哈希值:
System.out.println(Person)默认调用父类Object的toString()方法,返回类名@哈希值格式;你的Person类虽有getInfo()方法,但打印时未调用,也没重写toString()来输出预期格式。
修正后的代码
Person类(重写toString适配输出格式)
public class Person { public String name; public String surname; public String city; public Person(){}; public Person(String name, String surname, String city){ this.name = name; this.surname = surname; this.city = city; } // 重写toString,直接返回"名 姓 城市"格式 @Override public String toString() { return name + " " + surname + " " + city; } }
Program类(利用拆分数据批量创建Person对象)
public class Program { public static void main(String[] args) { String text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow"; // 按空格、点、斜杠拆分,得到有序的名、姓、城市数组 String[] splitData = text.split("[/. ]"); Person[] personArray = new Person[3]; // 每3个元素对应一个人的信息,循环批量创建对象 for (int i = 0; i < 3; i++) { int baseIndex = i * 3; String name = splitData[baseIndex]; String surname = splitData[baseIndex + 1]; String city = splitData[baseIndex + 2]; personArray[i] = new Person(name, surname, city); } // 遍历打印,自动调用Person的toString输出预期格式 for (Person person : personArray) { System.out.println(person); } } }
说明
- 拆分后的数组
splitData按「名、姓、城市」的顺序每3个元素为一组,通过循环批量创建Person对象,彻底替代硬编码方式。 - Person类重写
toString()后,直接用System.out.println(person)就能输出符合要求的格式;如果想保留getInfo()方法,也可以把打印语句改成System.out.println(person.getInfo()),但重写toString更符合Java打印对象的常规习惯。
内容的提问来源于stack exchange,提问作者Mary Heidi
相关产品推荐
相关产品推荐

