Мне нужна помощь, моя Java-программа ничего не возвращает при компиляции - PullRequest
1 голос
/ 01 марта 2011

Я студент колледжа, делаю домашнее задание на Java. Я создал эту программу, которая позволяет пользователю вводить информацию о работе.

Проблема в том, что моя программа не возвращает введенную информацию.

Я некоторое время смотрю на свою программу, но знаю, что мне чего-то не хватает.

public class Employee 
{
    String name;             // Employee name
    String employeeNumber;   // Employee number
    String hireDate;         // Employee hire date
    int shift;                   // Employee shift
    double payRate; 

    public void setEmployeeNumber(String e)
    {
       if (isValidEmpNum(e))
       {
          employeeNumber = e;
       }
       else
       {
          employeeNumber = "";
       }
    }

    public Employee(String name, String e, String hireDate, double payRate, int shift)
    {
       this.name = name;
       this.setEmployeeNumber(e);
       this.hireDate = hireDate;
       this.payRate = payRate;
       this.shift = shift; 
    }

    public Employee()
    {
       name = "";
       employeeNumber = "";
       hireDate = "";
    }

    public void setpayRate(double payRate)
    {
       this.payRate = payRate;
    }

    public double getpayRate()
    {
       return payRate;
    }

    public void setshift(int shift)
    {
       this.shift = shift;
    }

    public int getshift()
    {
       return shift;
    }


    public void setName(String name)
    {
       this.name = name;
    }

    public void setHireDate(String hireDate)
    {
       this.hireDate = hireDate;
    }

        public String getName()
    {
       return name;
    }

    public String getEmployeeNumber()
    {
       return employeeNumber;
    }

    public String getHireDate()
    {
       return hireDate;
    }

    private boolean isValidEmpNum(String e)
    {
       boolean status = true;

       if (e.length() != 5)
          status = false;
       else
       {
         if ((!Character.isDigit(e.charAt(0)))  ||
            (!Character.isDigit(e.charAt(1)))   ||
            (!Character.isDigit(e.charAt(2)))   ||
            (e.charAt(3) != '-')                ||
            (!Character.isLetter(e.charAt(4)))  ||
            (!(e.charAt(4)>= 'A' && e.charAt(4)<= 'M')))
          {
             status = false;
          }
       }
       return status;
    }
    public String toString()
    {
       String str = "Name: " + name + "\nEmployee Number: ";

       if (employeeNumber == "")
       {
          str += "INVALID EMPLOYEE NUMBER";
       }
       else
       {
          str += employeeNumber;
       }

       str += ("\nHire Date: " + hireDate);
       return str;
    }  
}

Я объявил это в другом классе.

import javax.swing.JOptionPane;

public class ProductionWorkerDemo extends Employee 
{
    public static void main(String[] args)
    {
       String name;             // Employee name
       String employeeNumber;   // Employee number
       String hireDate;         // Employee hire date
       int shift;                    // Employee shift
       double payRate;               // Employee pay
       String str;
       String str2;


       name = JOptionPane.showInputDialog("Enter your name: ");

       employeeNumber = JOptionPane.showInputDialog("Enter your employee number: ");

       hireDate = JOptionPane.showInputDialog("Enter your hire date: ");

       str = JOptionPane.showInputDialog("Enter your shift: ");

       payRate = Double.parseDouble(str);

       str2 = JOptionPane.showInputDialog("Enter your payrate: ");

       payRate = Double.parseDouble(str2);

       ProductionWorkerDemo pw = new ProductionWorkerDemo();

        System.out.println();
        System.out.println("Name: " + pw.getName());
        System.out.println("Employee Number: " + pw.getEmployeeNumber());
        System.out.println("Hire Date: " + pw.getHireDate());
        System.out.println("Pay Rate: " + pw.getpayRate());
        System.out.println("Shift: " + pw.getshift());

    }
}

Ответы [ 6 ]

3 голосов
/ 01 марта 2011

Вам нужно использовать соответствующий конструктор или методы set* для установки полей на объекте.В настоящее время все они пусты, поэтому методы get* не возвращают ничего или значения по умолчанию.

Кроме того, вам не следует расширять Employee классом, содержащим метод main, просто используйте Employee класс напрямую (идея наследования от класса заключается в расширении его, в вашем случае вам просто нужен объект как объект, поэтому сохраняйте данные, поэтому не производите от них данные, а используйте их):

import javax.swing.JOptionPane;

public class ProductionWorkerDemo
{
    public static void main(String[] args)
    {
       String name;             // Employee name
       String employeeNumber;   // Employee number
       String hireDate;         // Employee hire date
       int shift;                    // Employee shift
       double payRate;               // Employee pay
       String str;
       String str2;


       name = JOptionPane.showInputDialog("Enter your name: ");

       employeeNumber = JOptionPane.showInputDialog("Enter your employee number: ");

       hireDate = JOptionPane.showInputDialog("Enter your hire date: ");

       str = JOptionPane.showInputDialog("Enter your shift: ");

       payRate = Double.parseDouble(str);

       str2 = JOptionPane.showInputDialog("Enter your payrate: ");

       payRate = Double.parseDouble(str2);

       Employee pw = new Employee(/*provide arguments here*/);

        System.out.println();
        System.out.println("Name: " + pw.getName());
        System.out.println("Employee Number: " + pw.getEmployeeNumber());
        System.out.println("Hire Date: " + pw.getHireDate());
        System.out.println("Pay Rate: " + pw.getpayRate());
        System.out.println("Shift: " + pw.getshift());

    }
}
1 голос
/ 01 марта 2011

Сначала вам нужно добавить конструктор демо-класса:

public class ProductionWorkerDemo extends Employee{

  public ProductionWorkerDemo(String name, String e, String hireDate, double payRate, nt shift){
 {
     super(name, e, hireDate, payRate, shift);
  }

}

Затем в вашем классе вам нужно создать экземпляр:

ProductionWorkerDemo pw = new ProductionWorkerDemo(name, 
                                    employeeNumber, 
                                    hireDate,
                                    payRate,
                                    shift);
1 голос
/ 01 марта 2011

Вы устанавливаете информацию о сотруднике только для локальных переменных.Вы не передаете их в ProductionWorkerDemo или его сотруднику суперкласса.

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

  2. Вы не передаете переменные Сотруднику.Вы создали конструктор в классе Employee, который принимает их все, чтобы вы могли использовать его

    Employee pw = new Employee(name, employeeNumber, hireRate, payRate, shift);

  3. Теперь вы заметите, что вы непопросил смену.

0 голосов
/ 01 марта 2011

Я исправляю проблему с моей программой, спасибо всем за помощь.

Я не передавал переменные Сотруднику.

Я добавляю это утверждение в класс ProductionWorkerDemo.

Employee pw = new Employee (имя, employeeNumber, hireRate, payRate, shift);

P.S. Вы можете закрыть эту тему.

0 голосов
/ 01 марта 2011

У вас есть локальные переменные в main(), значения которых вы устанавливаете. Затем вы создаете объект ProductionWorkerDemo, у которого есть переменные экземпляра с такими же именами, но все они изначально пусты, поскольку конструктор устанавливает их таким образом.

Вы никогда не передаете свои локальные переменные в ваш объект ProductionWorkerDemo, поэтому при вызове методов получения они возвращают пустые значения.

0 голосов
/ 01 марта 2011

Вы объявляете переменные с именем name, employeeenumber и т. Д. В вашем основном методе. Когда вы попытаетесь использовать их, он будет использовать их, а не переменные вашего класса.

почему бы вам не попробовать создать новый ProductionWorkerDemo на основе конструктора, который вы определили в классе Employee?

ProductionWorkerDemo pw = new ProductionWorkerDemo(name,employeeNumber,hireDate,payRate,shift);

Кроме того, ваш payRate назначается дважды, вам следует сменить первый на сдвиг и использовать Integer.parseInt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...