2013-02-17 197 views
1

我不能讓我的頭在這附近。 我有一個用戶類:在java中創建多個對象oop

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

數組是不是你的方式去你的情況。使用List

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(); 

預定的恆定的

正是因爲我建議使用清單。

+0

@Abu不是,當然我固定的 – 2013-02-20 10:26:07

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<User> usersList = new ArrayList<User>(); 
    //then inside the loop populate the list with its `List#add(elem)` method 
+0

用戶應該是用戶[] – BobTheBuilder 2013-02-17 13:04:52

1

應該
User user[] = new User[size]; //在這裏創建大小sizeUser對象的數組

然後爲每個user
user[i] = new User(); //這裏要初始化每個用戶對象

1

你比較檢查菜單值是否有誤。

它不應該是menu = 1而應該是menu == 1

我不知道你將如何存儲用戶,但我建議做一個ArrayList將存儲用戶對象,並每當創建一個新的User對象將它添加到列表中。

在列出用戶時,只需遍歷所創建的數組列表即可。

我覺得這是你所需要的:

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); 
    } 
} 
2

您可以檢查這個錯誤。

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 [i] = new User()創建User對象,但創建了一個引用變量。將參考變量轉換爲對象需要如下:

user [i] = new User();

這你可以找到更多的Confusion of reference variables and objects in arrays (array of array objects)