You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拆分字符串生成Person对象数组并正确输出的代码错误排查求助

问题分析与代码修正

问题排查

  1. 未复用拆分后的数据创建Person对象:你已经正确拆分字符串得到了array1,但后续创建Person时用了硬编码参数,完全没用到拆分结果,违背任务要求。
  2. 打印对象输出哈希值: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:56:00