java NullPointerException错误。没有输出

时间:2014-10-15 18:38:34

标签: java java.util.scanner joptionpane

所以我有一个用Java做的学校作业,我已经创建了程序,但它没有给我一个输出。我仍然是初学者,所以PLZ帮助我解决问题。我的代码的前半部分使用joptionpane,但我想在控制台中显示输出。这是我的代码:

import java.util.Scanner;
import javax.swing.JOptionPane;

public class payroll2
{
    public static void main(String args[])
    {
        new payroll2().SetPayrollDetail();
        new payroll2().SetBonus();
        new payroll2().SetCommission();
        new payroll2().SetNssf();
        new payroll2().SetNetSalary();
        new payroll2().GetPayroll();
    }

    Scanner myScanner=new Scanner(System.in);
    Double empID;
    String empName;
    String empDept;
    String designation;
    Double basicSalary;

    Double bonus;
    Double commission;
    Double nssf;
    Double netSalary;


    public void SetPayrollDetail()
    {
        empID = Double.parseDouble(JOptionPane.showInputDialog(null, "Enter ID: ", "ID",JOptionPane.QUESTION_MESSAGE));

        empName = JOptionPane.showInputDialog(null, "Enter Name: ", "Name",JOptionPane.QUESTION_MESSAGE);

        empDept = JOptionPane.showInputDialog(null, "Enter Department (Marketing or Other): ", "Department",JOptionPane.QUESTION_MESSAGE);

        designation = JOptionPane.showInputDialog(null, "Enter Designation (Manager, Executive or Other): ", "Designation",JOptionPane.QUESTION_MESSAGE);

        basicSalary = Double.parseDouble(JOptionPane.showInputDialog(null, "Enter Basic Salary: ", "Basic Salary",JOptionPane.QUESTION_MESSAGE));
    }

    public void SetBonus()
    {
        if(basicSalary < 1500){
            bonus = 0.0;
        }
        else if(basicSalary>=1500 && basicSalary<3000){
            bonus = basicSalary * (12/100);
        }
        else if(basicSalary>=3000 && basicSalary<5000){
            bonus = basicSalary * (15/100);
        }
        else{
            bonus = basicSalary * (25/100);
        }

        System.out.println(bonus);
    }

    public void SetCommission()
    {
        if( empDept.equalsIgnoreCase("other") ){
            commission = 0.0;
        }
        else if( empDept.equalsIgnoreCase("marketing") && designation.equalsIgnoreCase("manager") ){
            commission = basicSalary * (30/100);
        }
        else if( empDept.equalsIgnoreCase("marketing") && designation.equalsIgnoreCase("executive") ){
                    commission = basicSalary * (15/100);
        }
        else if( empDept.equalsIgnoreCase("marketing") && designation.equalsIgnoreCase("other") ){
                    commission = basicSalary * (10/100);
        }
        else{
            commission = 0.0;
        }

        System.out.println(commission);
    }

    public void SetNssf()
    {
        if(basicSalary < 1500){
            nssf = basicSalary * (5/100);
        }
        else if(basicSalary>=1500 && basicSalary<3000){
            nssf = basicSalary * (8/100);
        }
        else if(basicSalary>=3000 && basicSalary<5000){
            nssf = basicSalary * (12/100);
        }
        else if(basicSalary>=5000 && basicSalary<7000){
            nssf = basicSalary * (15/100);
        }
        else if(basicSalary>=7000 && basicSalary<10000){
            nssf = basicSalary * (20/100);
        }
        else{
            nssf = basicSalary * (25/100);
        }

        System.out.println(nssf);
    }

    public void SetNetSalary()
    {
        netSalary = ( basicSalary + commission + bonus ) - nssf;

        System.out.println(netSalary);
    }

    public void GetPayroll()
    {
        System.out.println("Payroll Details \n _____________________");
        System.out.println("ID:\t" + empID);
        System.out.println("name:\t" + empName);

        System.out.println(bonus);
        System.out.println(commission);
        System.out.println(nssf);
        System.out.println(netSalary);

    }

}

2 个答案:

答案 0 :(得分:3)

默认情况下,您有一堆未初始化为任何值的值:

Double empID;
String empName;
String empDept;
// etc.

创建对象的实例时,可以调用方法来初始化它们:

new payroll2().SetPayrollDetail();

但是你不能保持那个实例。您立即创建一个全新的实例并尝试对其进行操作:

new payroll2().SetBonus();

这个新实例从未将其值初始化为任何值。所以它不能使用这些值。相反,您希望保留该原始实例,以便您可以对 进行操作:

payroll2 instance = new payroll2();
instance.SetPayrollDetail();
instance.SetBonus();
// etc.

答案 1 :(得分:0)

每次进行操作时都会重新创建payroll2实例。使用单个实例。

payroll2 p = new payroll2();
p.SetPayrollDetail();
p.SetBonus();
p.SetCommission();
p.SetNssf();
p.SetNetSalary();
p.GetPayroll();

此外,方法应该以一个小写字母开头,类名称带有大写字母。