【问题标题】:How to fill an array/list separately in Java?如何在 Java 中分别填充数组/列表?
【发布时间】:2026-01-10 07:10:01
【问题描述】:

我有“1”类。在那个类中,我定义了变量“名称”“电话号码”和“ID”。我为这些变量定义了所有的集合和获取方法以及构造函数。

在“2”类中,我想从控制台中填充这些变量。这将是我的 CRUD 的第一个“选项”,因此每次用户选择 opcion=1 时,系统都必须让这些变量分别添加。我知道我必须使用 Array List 但我无法成功。这是代码的示例。大写字母代码是我卡住的地方。谢谢。

------First Class---------
package VV;

public class 1 
{

    private String name;
    private String phone_number;
    private String id;

    public 1(String name, String phone_number, String id)
    {this.name=name;
    this.phone_number=phone_number;
    this.id=id;
    }
    
    public String getName() 
    {   return name;
    }

    public void setName(String name) 
    {   this.name = name;
    }

    public String getPhone_number() 
    {   return phone_number;
    }

    public void setPhone_number(String phone_number) 
    {   this.phone_number = phone_number;
    }

    public String getId() 
    {   return id;
    }

    public void setId(String id) 
    {   this.id = id;
    }
----------Second class------------
package VV;

     public class 2 
     {
     public 2()
          {"Insert the name of the student:"
           A METHOD TO INSERT THE NAME OF THE STUDENT
           "Insert the phone number of the student:"
            A METHOD TO INSERT THE PHONE NUMBER OF THE STUDENT
           "Insert the ID of the student:"
            A METHOD TO INSERT THE ID OF THE STUDENT
           ..And so on, each time user selects the opcion "add new student"
           (I didn't put the while-case here with all its options to simply)

           }
     }

【问题讨论】:

  • 你为什么要在该类2的构造函数中输入?
  • “输入”将在另一个类 (3) 中。我这样说是为了澄清我想在那里创建什么样的方法。输入在实践中不会存在。
  • 确保您的命名遵循conventions 否则您会发现它难以阅读并且更难获得支持
  • 为什么需要第二类将值插入第一类?这听起来像是应该在第一类开始的方法
  • 根据上下文,我猜输入应该在主操作类中。应声明和初始化一个第一类对象,并根据用户的输入,设置字段

标签: java arrays arraylist crud


【解决方案1】:

我实际上不知道为什么你需要第二类的构造函数来获取用户的输入并填充第一类的字段。

我从整个讨论中了解到,您需要通过获取用户输入来设置类的变量,并且您需要一种动态的方式来获取该输入并设置值。

第一种方式:

嗯,这有点动态。您可以使用reflection 访问一个类的所有变量,并且可以动态设置它们的值。

首先,在first 类中创建一个默认构造函数。然后在主类/任何你想从用户那里获取输入的地方,创建一个第一类的对象并用默认构造函数初始化它。然后使用反射来处理各个字段,从用户那里获取输入并设置字段中的值。这种方式不需要知道有哪些字段可以明确地从用户那里获取输入。请记住,只有在向最终用户公开变量名称没有问题的情况下,您才能使用此方法。我只使用字符串输入,因为您在第一类中只有字符串作为变量。如果变量是私有的,则需要 field.setAccessible(true)。那么,让我们看看主类中的代码/您将在其中调用该函数以获取用户输入:

Field[] arrayOfFields = Student.class.getDeclaredFields();
Scanner sc = new Scanner(System.in);
Student student = new Student();
for (Field field : arrayOfFields) {
    try {
        field.setAccessible(true);
        System.out.println("Please enter the Student " + field.getName());
        field.set(student, sc.nextLine());
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

相应地设置字段。

第二种方式:

如果您知道初始化对象所需的变量,只需使用扫描仪从用户控制台输入中一一扫描并初始化对象:

Scanner sc = new Scanner(System.in);
String id,name,phone_number;
System.out.println("Please enter the Student ID:");
id = sc.nextLine();
System.out.println("Please enter the Student Name:");
name = sc.nextLine();
System.out.println("Please enter the Student Phone Number:");
phone_number = sc.nextLine();
Student student = new Student(id, name, phone_number);

就这么简单。

【讨论】:

  • 是的!太棒了!我不知道那个扫描仪,方法。我还是个业余爱好者。谢谢!