2016-03-06 2 views
0

Доброе утро! Я пытаюсь понять классы на Java. Моя задача - создать класс Employee, класс Name и класс Address и использовать их для хранения информации в массиве. Очевидно, что мой код ниже по-прежнему работает, но я не понимаю, как использовать класс Name и класс Address, чтобы поместить значения в массив.Использование вложенных классов и массивов

В частности, в моем коммутаторе (случай 1) я привязываю, чтобы назначить вход для каждого атрибута в массив, но я не понимаю, как действительно работают экземпляры классов. Я пробовал читать в Интернете и в своем учебнике, но ни одно из объяснений на самом деле не щелкает со мной.

Это мое первое знакомство с Java-классами, поэтому любые объяснения, которые помогут мне применить эти концепции в будущем (и не только в этом коде), будут высоко оценены. Я действительно пытаюсь это изучить, а не просто завершить HW-задание. Заранее благодарю за ваше время и задуматься!

import java.util.Scanner; 

class Employee { 

    String fName = " "; 
    String lName = " "; 
    String city = " "; 
    String state = " "; 

    public static void main(String [] args) { 

     int choice; //For Menu option 
     Scanner input = new Scanner(System.in); 
     boolean looping = true; //Loop the menu 
     while(looping == true) { 
      System.out.println("1. Add New Employee"); 
      System.out.println("0. Exit"); 
      System.out.print("Choice: "); 
      choice = input.nextInt(); 

      switch(choice) { 
       case 0: { 
        System.out.println("Goodbye."); 
        looping = false; 
        break; 
       } 
       case 1: { 
        Employee [] employeeInfo = new Employee[9]; 
        for(int i = 0; i < employeeInfo.length ; i++) { 
         Scanner info = new Scanner(System.in); 

         System.out.print("Enter the Employee's First Name: "); 
         employeeInfo[i].fName = info.nextLine(); 
         System.out.print("Enter the Employee's Last Name: "); 
         employeeInfo[i].lName = info.nextLine(); 
         System.out.print("Enter the Employee's City: "); 
         employeeInfo[i].city = info.nextLine(); 
         System.out.print("Enter the Employee's State: "); 
         employeeInfo[i].state = info.nextLine(); 
         break; 
       } 
       default: 
        System.out.println("Invalid option."); 
      } 
     } 
    } 

    class Name { 

     private String fName; 
     private String lName; 

     //Constructors 
     Name() { //no parameters 

      fName = " "; 
      lName = " "; 
     } 

     Name(String fName, String lName) { //parameters 

      this.fName = fName; 
      this.lName = lName; 
     } 

     @Override 
     public String toString() { 

      return "The employee's name is: " + fName + " " + lName; 
     } 
    } 

    class Address { 

     private String city; 
     private String state; 

     //Constructors 
     Address() { 

      this.city = " "; 
      this.state = " "; 
     } 

     Address(String city, String state) { 

      this.city = city; 
      this.state = state; 
     } 

     @Override 
     public String toString(){ 

      return "The employee's residence is " + city + ", " + state; 
     } 
    } 
}  
+0

Прочтите https://docs.oracle.com/javase/tutorial/java/javaOO/. У ваших трех классов нет причин быть вложенными. Если вы еще не понимаете классы и объекты, их вложение сделает вещи еще более запутанными. Поместите каждый класс в свой собственный файл. –

+0

Класс имени и адреса должен, вероятно, иметь такие поля, как: «Адрес адреса» и «Имя имени». Прежде чем назначить свой ввод экземпляру каждого сотрудника в вашем массиве, вы должны сначала создать экземпляр, например 'employeeInfo [i] = new Employee()'. –

+0

Спасибо, @JBNizet, похоже, у него много отличных примеров. Я рассматриваю этот пример велосипеда под ссылкой на классы, и все начинает иметь смысл. – mellerlite

ответ

0

Ваш Employee[] employeeInfo = new Employee[9]; создает массив, который может содержать 9 Employee объектов, но каждый элемент изначально пустой. Вам нужно будет заполнить каждый новый объект Employee. Внутри ваш for петли, сделайте это в верхней части:

employeeInfo[i] = new Employee(); 

Вы также должны переместить break из петли for, в нижнюю части case. В противном случае ваша программа будет вводить только данные одного человека, а не девять человек.

+0

Спасибо @ ChrisJester-Young, это имеет смысл! Можете ли вы представить себе причину, по которой мое меню будет «пропускать» переменную lName? Он печатает сообщение, но затем пропускает его и сразу выводит на печать вариант для города, не позволяя мне вводить имя lName. – mellerlite

+0

AAAAH странно, изменяя nextLine(); в следующем(); исправляет это. – mellerlite