2013-11-10 4 views
-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 класс

-The класс UserGroup должен иметь ArrayList пользователей.

Напишите конструктор для класса UserGroup. Он должен создать экземпляр ArrayList.

В UserGroup напишите метод под названием .addSampleData(), который создает 10 пользователей, и используя метод add() ArrayList, поместите 10 новых объектов User в ArrayList.

В UserGroup напишите метод getUser, который принимает int как параметр и возвращает пользователя в этом слоте ArrayList.

В UserGroup написать() в UserGroup printUsernames:

Использование расширенных для цикла (смотри выше), цикл через ArrayList и напечатать имя пользователя и UserType каждого пользователя в ArrayList.

То, что я до сих пор:

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

Это, очевидно, далеко не полный, но я полностью застрял. Моя первая проблема заключается в том, что «для (User user: groupArray)» дает мне ошибку незаконного начала типа. Пожалуйста, помогите мне с этим!! Я думаю, что мой пользовательский класс в порядке, но класс UserGroup нигде не достиг цели, и я не знаю, как это сделать!

+0

Использование «пакета» в процессе импорта кажется подозрительным: 'импорт package.User.UserType;', как правило, это будет 'импорт User.UserType;' (хотя имена пакетов по конвенции обычно начинаются с строчными буквами). Действительно ли эти два класса содержатся в разных пакетах? Можете ли вы включить свои инструкции пакета с кодом? –

+0

Обратите внимание, что я сменил тему вопроса на вопрос, который пытается отразить вашу фактическую проблему. Вам следовало бы сделать то же самое с вашим следующим вопросом. Ваш предыдущий заголовок вопроса: «Очень новая для Java - нужна большая помощь с этим кодом» была необычайно бесполезной, поскольку она ничего не говорит нам о вашей главной проблеме. –

+0

спасибо, когда я удалил пакет, который компилировал ошибку, но есть еще много других проблем с этим кодом, которые я не могу понять, как исправить. Теперь, когда ошибка импорта исправлена, я могу изменить свой заголовок темы, чтобы отразить мои новые проблемы? – user2973447

ответ

0
  1. спецификация требует списка UserGroup «s пользователей будут экземпляров в конструкторе. Таким образом, она должна быть не быть статичны, а экземпляр переменной:

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

    Таким образом, вы можете создать несколько UserGroup экземпляров, каждый из которых имеет свой собственный список пользователей. Со статической переменной это было бы невозможно.

  2. Ваш getUser(int) способ не делает то, что он должен делать, и не скомпилируется. Вы возвращаете тип User вместо конкретный экземпляр User.
  3. Расширенный цикл, который вы используете для печати имен пользователей, является свободным плавающим блоком кода. Он должен находиться внутри метода printUsernames() в соответствии с вашими требованиями.
  4. Ваш класс User будет работать нормально, но его переменные экземпляра должны быть private вместо public.
  5. Чтобы решить проблемы с импортом, введите класс User в пакет, например. user, и имеют UserGroup импорт User.UserType (часть «Пользователь.» Необходима с UserType является внутренним классом в пределах User) из этого пакета.

    package user; 
    public class User{ 
    // ... 
    } 
    
    package user; 
    import java.util.*; 
    import user.User.UserType; 
    
    public class UserGroup{ 
    // ... 
    } 
    
+0

Я внесла изменения, которые вы предложили, и отредактировал мое оригинальное сообщение, чтобы отразить их, но я получаю сообщение об ошибке «не может найти символьный класс Arraylist» на линии «people = new ArrayList (); "когда я пытаюсь скомпилировать. Кроме того, как мне перейти к редактированию моего кода, чтобы вернуть конкретный экземпляр пользователя, а не пользователь типа? Ты до сих пор оказываешься огромной помощью - Спасибо! – user2973447

+0

Обратите внимание на нижний регистр «L» в сообщении об ошибке: «не удается найти массив классов символов ** l ** ist». Он должен быть «ArrayList » с верхним регистром «L». –

+0

Для возврата правильного экземпляра пользователя используйте метод [get method] вашего списка (http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#get (int)). –

0

Для перебирать пользователей в ArrayList, расширенных цикл должен быть таким:

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

EDIT: Придерживаться более эффективно на вопрос и быть более традиционным, то ArrayList должны быть объявлены затем создаются после.

private static ArrayList<User> UserGroup; 

public UserGroup() { 
    UserGroup = new ArrayList<>(); 
} 
+0

Я отредактировал свой код, чтобы сделать то, что вы сказали до сих пор, но «for (User user: groupArray)» дает мне компиляционную ошибку с незаконным запуском типа. Как я могу это исправить? – user2973447

+0

so UserGroup.toArray() { System.out.printf ("% s% s \ n", user.getUsername(), user.getuserType); } ? – user2973447

+0

это все еще дает мне незаконное начало сообщения об ошибке типа – user2973447

0

Использование "пакета" в процессе импорта кажется подозрительным:

import package.User.UserType; 

, как правило, это было бы

import User.UserType; 

или на самом деле чаще всего:

import user.UserType; 

поскольку имена пакетов ntion следует начинать с строчной буквы.

В будущем, пожалуйста, обязательно указывайте свои заявления пакета с кодом, если имя пакета имеет отношение к вопросу.

Смежные вопросы