2016-03-19 15 views
0

Birisi, benim kodumda 2 ve 3 durumunun hiçbir şey yapmadığı ve belki de bazı tavsiyelerde bulunma nedeninin neden olduğu konusunda biraz ışık tutabileceğini merak ediyordum. İlgili olduğunu düşündüğüm her türlü bilgiyi sunacağım ve daha fazla ayrıntı talep ederseniz daha fazlasını ekleyeceğim.Java - anahtar: durum 2 ve 3 çalışmıyor

Kodumu göndermeden önce bazı ayrıntıları sunmama izin verin: Programım çok basit bir çalışan veritabanı olacak şekilde tasarlanmıştır. Bir anahtar deyimi kullanarak komut satırında kullanıcı seçeneklerini sunar. anahtardan seçenekler:,

  1. tüm çalışanların veritabanında veritabanına
  2. listesi bir çalışanı ekleyin ve görünümü ücretler ve saatleri
  3. listesi çalıştı tüm çalışanlar ve kurumsal faydalarını göstermek herhangi
  4. eğer
  5. Program 1, Çalışan türü için bir ArrayList öğesine bir Çalışan nesnesi ekler.

Çalışan sınıfı, çalışanların isimlerini, ücretlerini, çalışma saatlerini ve çalıştıkları şirketleri takip etmekten sorumludur.

Durum 1 ve 4 düzgün şekilde çalışıyor gibi görünüyor. Bununla birlikte, durum 2 ve 3 hiçbir şey yapmıyor gibi görünmektedir. durumda 2 ve 3'te

, ben argümanları olarak ArrayList endeksleri geçmesine çalışılıyor

 ArrayList<Employee> employees = new ArrayList<Employee>(); 

    int number = 0; 

    while(number != 4) 
    { 

     System.out.print("Please select an option: " + 
       "\n1) Add an Employee" + 
       "\n2) List Employees" + 
       "\n3) List Benefit Status" + 
       "\n4) Quit"+ "\n"); 
     number = keyboard.nextInt(); 
     keyboard.nextLine(); 

     switch (number) 
     { 
      case 1: 
       System.out.println("Hourly, contract, or salary employee? "); 
       type = keyboard.nextLine(); 

       if(type.equalsIgnoreCase("hourly")) 
       { 
        System.out.print("\nEnter the company: "); 
        comp = keyboard.nextLine(); 
        System.out.print("\nEnter the first name: "); 
        fn = keyboard.nextLine(); 
        System.out.print("\nEnter the last name: "); 
        ln = keyboard.nextLine(); 
        System.out.print("\nEnter the hourly wage: "); 
        wage = keyboard.nextDouble(); 
        System.out.print("\nEnter the hours worked: "); 
        hours = keyboard.nextInt(); 

        Employee employee2 = new Employee(comp, fn, ln); 
        HourlyEmployee he = new HourlyEmployee(wage, hours); 
       } 

       else if(type.equalsIgnoreCase("contract")) 
       { 
        System.out.print("\nEnter the company: "); 
             comp = keyboard.nextLine(); 
             System.out.print("\nEnter the first name: "); 
             fn = keyboard.nextLine(); 
             System.out.print("\nEnter the last name: "); 
             ln = keyboard.nextLine(); 
             System.out.print("\nEnter the hourly wage: "); 
             wage = keyboard.nextDouble(); 
             System.out.print("\nEnter the hours worked: "); 
             hours = keyboard.nextInt(); 

             Employee employee2 = new Employee(comp, fn, ln); 
        ContractEmployee ce = new ContractEmployee(wage, hours); 
       } 

       else if (type.equalsIgnoreCase("salary")) 
       { 
             System.out.print("\nEnter the company: "); 
             comp = keyboard.nextLine(); 
             System.out.print("\nEnter the first name: "); 
             fn = keyboard.nextLine(); 
             System.out.print("\nEnter the last name: "); 
             ln = keyboard.nextLine(); 
             System.out.print("\nEnter the salary: "); 
        salary = keyboard.nextDouble(); 

        Employee employee2 = new Employee(comp, fn, ln); 
        SalaryEmployee se = new SalaryEmployee(salary); 
       } 

       else 
       { 
        System.out.println("Invalid input."); 
        System.exit(0); 
       } 

       break; 
      case 2: 
       for(int i = 0; i < employees.size(); i++) 
       { 
        System.out.println(employees.get(i).toString()); 
       } 
       break; 
      case 3: 
       for(int i = 0; i < employees.size(); i++) 
       { 
        System.out.println(employees.get(i).determineBenefits()); 
       } 
       break; 
      case 4: 
       System.exit(0); 
       break; 
      default: 
       System.out.println("Invalid input."); 
       System.exit(0); 
     } 
    } 
} 

}: Burada ana yöntem içerir sürücü sınıfında bulunan anahtarın, bütünü olan sırasıyla toString() yöntemine ve determBenefits() yöntemlerine. Bu yöntemler anahtardan ayrı olarak test edildiğinde, düzgün çalışması için aynıdır. Peki, nasıl

public Employee() 
{ 

} 

public Employee(String com, String first, String last) 
{ 
    setCompany(com); 
    setFirstName(first); 
    setLastName(last); 
} 

: İlgili olduğu durumda

public String determineBenefits() 
{ 
    String benefits; 

    if(isSalaryEmployee == true) 
    { 
     benefits = "This employee has a standard company health " + 
      "insurance policy."; 
    } 

    else if(hhh >= 40) 
    { 
     benefits = "This worker gets benefits."; 
    } 

    else 
    { 
     benefits = "No benefits."; 
    } 

    return benefits; 
} 

Ve Çalışan kurucular,:

public String toString() 
{ 
    return firstName + " " + lastName + " from " + company + 
      ". The worker's pay this week was $" + pay + "."; 
} 

Ve determineBenefits() yöntemi: İşte toString() yöntemidir ArrayList'de bulunan Çalışan nesnelerini geçmem mi gerekiyor?

+0

"Çalışan" nesnelerini herhangi bir yerde "çalışanlar" listesine eklemiyorsunuz, bu nedenle listenin içeriğini (vaka 2 ve 3) yazdırdığınızda liste boş olduğundan hiçbir şey yazdırılmıyor. – Jesper

+1

Yan nota: kodunuz aşırı karmaşık. Çizgiyi takip ettikten sonra sıraya basmayın. Bunları yerine küçük yöntemlere ayırmayı düşünün. Bir döngü içinde bir anahtarın içinde/değilse, kaskatlı yapmamalısınız. Böyle bir kod elde edilemez hale gelir ... belki yazdıktan 5 dakika sonra – GhostCat

+0

Bunu işaret ettiğin için teşekkürler, Jesper. Sorun buydu ve çözülmesi kolay olan çok basit bir ihmal hatasıydı. Çözüldü olarak işaretleme. –

cevap

0

Açıklamalarda da belirtildiği gibi, benim problemim aslında Çalışan nesnelerini ArrayList'e eklemeyi unutmam, ki bu da düzeltmek için çok basit bir hataydı. Cevap veren herkese teşekkür ederim.

İlgili konular