2013-10-12 3 views
0

Я программист на C#, и я привык к синтаксисам C# для инкапсуляции и других материалов. Но теперь, по некоторым причинам, я должен напишите что-нибудь с java, и я практикую java уже целый день! Я собираюсь создать фиктивный проект для себя, чтобы сделать себя более комфортно с концепциями oop для Java.Я получаю исключение nullPointerException, когда я пытаюсь добавить некоторые значения в ссылочный класс из другого класса

Что я пытаюсь сделать, так это то, что я хочу класс с именем «Employee», который имеет три свойства (поля): firstName, lastName и id. И затем я хочу создать еще один класс с именем EmployeeArray, который будет строить массив из Employee s внутри себя и может выполнять некоторые операции над ним (по некоторым причинам, я хочу этот проект этот путь !!) Теперь я хочу, чтобы добавить некоторые значения в Employee с в пределах EmployeeArray class.here в своей работе до сих пор:

//this is the class for Employee 
public class Employee { 
private String firstName; 
private String lastName; 
private int id; 
public void SetValues(String firstName, String lastName, int id) { 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.id = id; 
} 

//this is the EmployeeArray class 
public class EmployeeArray { 
private int numOfItems; 
private Employee[] employee; 

public EmployeeArray(int maxNumOfEmployees) { 
    employee = new Employee[maxNumOfEmployees]; 
    numOfItems = 0; 
} 

public void InsertNewEmployee(String firstName, String lastName, int id){ 
    try { 
     employee[numOfItems].SetValues(firstName, lastName, id); 
     numOfItems++; 
    } 
    catch (Exception e) { 
     System.out.println(e.toString()); 
    } 

} 

//and this is the app's main method 
Scanner input = new Scanner(System.in); 
EmployeeArray employeeArray; 
employeeArray = new EmployeeArray(input.nextInt()); 

String firstName; 
String lastName; 
int id; 

firstName = input.nextLine(); 
lastName = input.nextLine(); 
id = input.nextInt(); 

employeeArray.InsertNewEmployee(firstName, lastName, id); 

проблема я получаю NullPointerException когда приложение хочет установить значения, и это происходит в справочнике employeeArray.I не знаю, что я пропал. Все предложения?

+0

Вставить трассировку стека для ошибки пожалуйста. Изменить эту строку: 'System.out.println (e.toString());' to 'e.printStackTrace();' и вы можете самостоятельно отлаживать причину. – adam0404

ответ

1

«Я C# программист, и я привык к синтаксисах С # для инкапсулирования и другие вещи.»

Хорошо. Тогда вы должны чувствовать себя как дома с Java :).

«Проблема в том, что я получаю исключение nullPointerException, когда приложение хочет установить значения».

В C#, если у вас есть массив объектов, то вы должны сначала выделить массив ... а затем ТАКЖЕ необходимость «новой» любой объект, который вы PUT в массиве. Не так ли?

То же самое в Java :)

Предлагаемое изменение:

1) Потерять свои функции "SetNewValues ​​()".

2) Убедитесь, что «Сотрудник» имеет конструктор, который принимает имя, фамилию и идентификатор.

3) Измените "вставить" метод:

public void InsertNewEmployee(String firstName, String lastName, int id){ 
    try { 
     employee[numOfItems] = new Employee(firstName, lastName, id); 
     numOfItems++; 
    } 
    catch (Exception e) { 
     System.out.println(e.toString()); 
    } 
+0

О да, теперь я это видел! Я не знаю, почему я пытался создать ссылку «Сотрудник» в конструкторе 'EmployeeArray' !!! Спасибо – roostaamir

1

вы не сделали объект сотрудника

сделать это:

public void InsertNewEmployee(String firstName, String lastName, int id){ 
try { 
    employee[numOfItems]=new Employee(); 
    employee[numOfItems].SetValues(firstName, lastName, id); 
    numOfItems++; 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

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