如何在Java中单独填写一个array/list?
How to fill an array/list separately in Java?
我有 class“1”。在那个 class 中,我定义了变量“name”、“phone number”和“ID”。我为这些变量定义了所有的 sets 和 gets 方法以及构造函数。
在 class "2" 中,我想从 consol 中填充那些变量。这将是我的 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)
}
}
我真的不知道为什么你需要第二个 class 的构造函数从用户那里获取输入并填充第一个 class 的字段。
我从整个讨论中了解到,您需要通过获取用户输入来设置 class 的变量,并且您需要一种动态的方式来获取该输入并设置值。
第一种方式:
嗯,这有点动态。您可以使用 reflection
访问 class 的所有变量,并且可以动态设置它们的值。
首先,在first
class中创建一个默认构造函数。然后在主 class/whereever 中你想从用户那里获取输入,创建第一个 class 的对象并使用默认构造函数初始化它。然后使用反射来处理各个字段,从用户那里获取输入并设置字段中的值。这种方式不需要知道有哪些字段可以明确地从用户那里获取输入。请记住,只有在向最终用户公开变量名称没有问题的情况下,您才可以使用此方法。我只使用了字符串输入,因为你只有第一个 class 中的字符串作为变量。如果变量是私有的,则需要 field.setAccessible(true)
。所以,让我们看看主要的代码 class/where 您将调用该函数来获取用户输入:
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);
就这么简单。
我有 class“1”。在那个 class 中,我定义了变量“name”、“phone number”和“ID”。我为这些变量定义了所有的 sets 和 gets 方法以及构造函数。
在 class "2" 中,我想从 consol 中填充那些变量。这将是我的 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)
}
}
我真的不知道为什么你需要第二个 class 的构造函数从用户那里获取输入并填充第一个 class 的字段。
我从整个讨论中了解到,您需要通过获取用户输入来设置 class 的变量,并且您需要一种动态的方式来获取该输入并设置值。
第一种方式:
嗯,这有点动态。您可以使用 reflection
访问 class 的所有变量,并且可以动态设置它们的值。
首先,在first
class中创建一个默认构造函数。然后在主 class/whereever 中你想从用户那里获取输入,创建第一个 class 的对象并使用默认构造函数初始化它。然后使用反射来处理各个字段,从用户那里获取输入并设置字段中的值。这种方式不需要知道有哪些字段可以明确地从用户那里获取输入。请记住,只有在向最终用户公开变量名称没有问题的情况下,您才可以使用此方法。我只使用了字符串输入,因为你只有第一个 class 中的字符串作为变量。如果变量是私有的,则需要 field.setAccessible(true)
。所以,让我们看看主要的代码 class/where 您将调用该函数来获取用户输入:
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);
就这么简单。