-1

我正在用 blueJ 编码。我的目标是:1)写一个用户类

一个用户:

has a username e.g 'fj3'
has a userType which can be: 'user', 'editor' or 'admin'
has a name e.g 'Francis'
has a constructor which takes the username, userType and name as parameters
has a getUsername() method
has a getUserType() method
has a getName() method
has a setUserType() method which takes one of the user types as a parameter 

2)写一个UserGroup类

- UserGroup 类必须有一个用户的 ArrayList。

为 UserGroup 类编写一个构造函数。它应该实例化 ArrayList。

在 UserGroup 中编写一个名为 .addSampleData() 的方法,该方法创建 10 个用户,并使用 ArrayList 的 add() 方法将 10 个新用户对象放入 ArrayList。

在 UserGroup 中编写一个 getUser 方法,该方法将 int 作为参数并返回 ArrayList 的该槽中的用户。

在 UserGroup 中,在 UserGroup 中编写 printUsernames() 方法:

使用增强的 for 循环(见上文),遍历 ArrayList 并打印 ArrayList 中每个用户的用户名和 userType。

到目前为止,我所拥有的是:

package user;
public class User{
     public enum UserType{                           
        ADMIN, EDITOR, USER;
     }

     private String id;                             
     private UserType userPermissions;               
     private String actualName;                      

     public User(String username, UserType userType, String name){
         id = username;
         userPermissions = userType;
         actualName= name;
     } 

    public String getUsername(){
        return id;
    }

    public UserType getUserType(){
        return userPermissions;
    }       

    public String getName(){
        return actualName;
    }

    public void setUserType(UserType input){
        userPermissions = input;
    }
}

还有我的 UserGroup 类:

package user;
import java.util.*;
import user.User.UserType; 

public class UserGroup{

    private ArrayList<User> people;

    public UserGroup(){
        people = new Arraylist<User>();
    }

    public static void addSampleData(String username, UserType userType, String name){
        People.add(new User(username, userType,name));
    }

    public String getUser(int list){
        return User; 
    }

    public void printUsernames(){
        for (User user: groupArray){
            System.out.printf("%s %s\n", user.getUsername(), user.getuserType);
        }
    }
}

这显然远未完成,但我完全陷入困境。我的第一个问题是“for (User user : groupArray)”给了我错误类型的非法开始。请在这件事上给予我帮助!!我认为我的 User 类很好,但我的 UserGroup 类无法完成所有目标,我不知道该怎么做!!

4

3 回答 3

0

要遍历数组列表中的用户,增强的 for 循环应该是这样的:

for (User user: groupArray)
    System.out.printf("%s %s\n", user.getUsername(), user.getuserType);

编辑:为了更有效地解决这个问题并更传统,应该声明 ArrayList 然后实例化。

private static ArrayList<User> UserGroup;

public UserGroup() {
    UserGroup = new ArrayList<>();
}
于 2013-11-10T00:09:31.030 回答
0

您在导入中使用“包”似乎很可疑:

import package.User.UserType; 

通常这是

import User.UserType; 

或者实际上更常见:

import user.UserType; 

因为按照惯例,包名应该以小写字母开头。

将来,如果包名称与问题相关,请务必在代码中包含您的包语句。

于 2013-11-10T00:24:46.557 回答
0
  1. 该规范要求UserGroup在构造函数中实例化一个用户列表。因此,它不应该是静态的,而是一个实例变量:

    public class UserGroup {
    
        private ArrayList<User> people;
    
        public UserGroup() {
            people = new ArrayList<User>();
        }
        // ...
    }
    

    这样,您可以创建多个UserGroup实例,每个实例都有自己的用户列表。使用静态变量,这是不可能的。

  2. 你的getUser(int)方法没有做它应该做的事情,也不会编译。您正在返回类型User而不是特定User实例。
  3. 用于打印用户名的增强 for 循环是一个自由浮动的代码块。它应该在printUsernames()您的规范规定的方法内。
  4. 你的User类可以正常工作,但它的实例变量应该是private而不是public.
  5. 要解决您的导入问题,请将您的User类放入包中,例如user,并从该包中UserGroup导入User.UserType(需要“User.”部分,因为UserType它是 中的内部类User)。

    package user;
    public class User{
    // ...
    }
    
    package user;
    import java.util.*; 
    import user.User.UserType;
    
    public class UserGroup{
    // ...
    }
    
于 2013-11-10T00:50:08.580 回答