1

我不能只是解决这个问题。我有一个用户类:

public class user {

private String name;
private int age;

public user()
{
}

public String getName()
{
    return name;
}



public int getAge()
{
    return age;
}

public void setName(String kname)
{
    name = kname;
}


public void setAge(int kage)
{
    alter = kage;
}

}

我正在我的 userUI 类中创建和列出用户

public class PersonalUI {

public static void main (String args[]) {
    int menu = 0;
    int i = 0;
    while (menu != 3)
    {   
    System.out.println("Please choose: \n (1) Create User \n (2) List User                \n              (3) Quit");
    menu = Console.readInt();
    if (menu = 1)
    {   
    User user[i] = new User();
    System.out.println("Please enter a name");
    String kname = Console.readString();
    user[i].setName(kname);
    }
}

我的问题:当我收到 User user[i] = new User(); 的错误时,如何创建多个对象 猜我只是做错了

4

5 回答 5

9

在您的情况下,数组不是要走的路。使用清单

List<User> users = new ArrayList<User>;

if (menu == 1)
{   
    User newUser = new User();
    users.add(newUser);
    newUser.setName(kname);
}

您不知道将预先输入的用户数量 - 因此使用动态数据结构。

您的问题是您试图同时做两件事:创建一个数组并将值分配给它的特定元素。

这是你应该如何操作一个数组:

int length = 5; // predetermined by you constant
User []users = new User[length];
//....
users[i] = new User();

正是由于预先确定的常数,我建议使用 List。

于 2013-02-17T13:02:51.993 回答
3

你可以检查这个错误。

User user[i] = new User();

user[i] = new User();   // add this in your code

System.out.println("Please enter a name");
String kname = Console.readString();
user[i].setName(kname);

许多人认为语句 User user[i] = new User() 创建了 User 的对象,但它创建了一个引用变量。需要将引用变量转换为对象,如下所示:

用户[i] = 新用户();

您可以在Confusion of reference variables and objects in arrays (array of array objects)中找到更多信息

于 2013-02-17T13:33:45.753 回答
1

首先,您应该从命令行读取用户数组的大小,以定义循环外数组的大小。然后在循环内用适当的元素填充数组。

     System.out.println("please enter size of the user");
    int size=console.readInt();
    User[] user = new User[size]
    while (menu != 3)
    {   
    System.out.println("Please choose: \n (1) Create User \n (2) List User                \n              (3) Quit");
    menu = Console.readInt();
    if (menu == 1)//changed, you were using assigning here (menu=1)
    {   
    user[i] = new User();

但是,如果您想要一个动态数组,请使用像ArrayList这样的List实现类,它不需要您在创建数组时提供大小。

   List<User> usersList = new ArrayList<User>();
   //then inside the loop populate the list with its `List#add(elem)` method
于 2013-02-17T13:01:12.077 回答
1

它应该是// 在这里你创建大小的对象
User user[] = new User[size]; 数组Usersize

然后对于每个user
user[i] = new User(); //在这里您正在初始化每个用户对象

于 2013-02-17T13:04:34.770 回答
1

您检查菜单值的比较是错误的。

它不应该是menu = 1,而是应该是menu == 1

我不知道您将如何存储用户,但我建议制作一个ArrayList将存储用户对象并在创建新 User对象时将其添加到列表中的方法。

在列出 users 时,只需遍历创建的数组列表。

我认为这是你需要的:

public static void main (String args[]) {
    int menu = 0;
    int i = 0;
    List<User> list = new ArrayList<User>();
    while (menu != 3)
    {   
    System.out.println("Please choose: \n (1) Create User \n (2) List User                \n              (3) Quit");
    menu = Console.readInt();
    if (menu == 1)
    {   
    User user = new User();
    System.out.println("Please enter a name");
    String kname = Console.readString();
    user.setName(kname);
    // add this user to the list
    list.add(user);
    }
}
于 2013-02-17T13:10:59.540 回答