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

Java如何通过JOptionPane输入对话框创建Person类对象并实现要求功能

代码报错核心原因

  • 测试类中误用不存在的Forening类作为对象类型和构造方法名,你定义的实体类是Person,所有对象创建都应该用Person
  • Person类的age属性定义为public不符合封装规范,建议改为private
  • 你当前写了5个构造方法,需求要求4个,调整为常用的4个即可
  • 测试类中少创建1个Person对象,未满足4个不同构造方法的要求
  • 缺少年龄输入的合法性校验,用户输入非数字会直接抛出类型转换异常

修改后完整代码

Person类

public class Person
{
    // 统一私有属性符合封装要求
    private String name;
    private String adress;
    private int age;

    // 4个构造方法符合需求
    public Person(String name, String adress, int age)
    {
        this.name = name;
        this.adress = adress;
        this.age = age;
    }
    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
        this.adress = "";
    }
    public Person(String name, String adress)
    {
        this.name = name;
        this.adress = adress;
        this.age = 0;
    }
    public Person(String name)
    {
        this.name = name;
        this.adress = "";
        this.age = 0;
    }

    // 对应get/set访问方法
    public void setName(String name)
    {
        this.name = name;
    }
    public void setAdress(String adress)
    {
        this.adress = adress;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    public String getAdress()
    {
        return adress;
    }

    // toString方法
    public String toString()
    {
        return "姓名: " + name + " 年龄: " + age + " 地址: " + adress;
    }
}

TestClass类

import javax.swing.JOptionPane;

public class TestClass
{
    public static void main(String[] args)
    {
        // 5. 弹窗获取用户输入创建Person对象
        String name = JOptionPane.showInputDialog("请输入姓名:");
        String adress = JOptionPane.showInputDialog("请输入地址:");
        int age = 0;
        // 年龄合法性校验
        while (true) {
            String ageStr = JOptionPane.showInputDialog("请输入年龄:");
            try {
                age = Integer.parseInt(ageStr);
                if (age >= 0) break;
                JOptionPane.showMessageDialog(null, "年龄不能为负数,请重新输入");
            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(null, "请输入合法的数字年龄");
            }
        }
        Person p1 = new Person(name, adress, age);
        JOptionPane.showMessageDialog(null, "用户输入创建的对象:\n" + p1.toString());

        // 6. 创建4个使用不同构造方法的Person对象
        // 构造方法1:(姓名,年龄)
        Person p2 = new Person("Johanna", 20);
        JOptionPane.showMessageDialog(null, "构造方法(姓名,年龄)创建的对象:\n" + p2.toString());
        // 构造方法2:(姓名,地址)
        Person p3 = new Person("John", "JavaScript大街1号");
        JOptionPane.showMessageDialog(null, "构造方法(姓名,地址)创建的对象:\n" + p3.toString());
        // 构造方法3:(姓名)
        Person p4 = new Person("Sandra");
        JOptionPane.showMessageDialog(null, "构造方法(姓名)创建的对象:\n" + p4.toString());
        // 构造方法4:(姓名,地址,年龄)
        Person p5 = new Person("李明", "北京朝阳区", 30);
        JOptionPane.showMessageDialog(null, "构造方法(姓名,地址,年龄)创建的对象:\n" + p5.toString());
    }
}

修改后的代码完全满足所有开发要求,每个对象都会通过弹窗调用toString展示数据,同时兼容异常输入场景。

内容的提问来源于stack exchange,提问作者BananaSweden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:24:02