java NullPointerException 错误。无输出

标签 java java.util.scanner joptionpane

所以我有一个用 Java 完成的学校作业,我已经创建了该程序,但它没有给我输出。我还是一个初学者,所以请帮助我解决问题。我的代码的前半部分使用 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);

    }

}

最佳答案

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

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

当您创建对象的实例时,您调用一个方法来初始化它们:

new payroll2().SetPayrollDetail();

但是您不会保留该实例。您立即创建一个全新实例并尝试对其进行操作:

new payroll2().SetBonus();

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

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

关于java NullPointerException 错误。无输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26389750/

相关文章:

java - REST 和非 RESTful URL 的组合不起作用

java - Spring在构造函数中使用泛型多次创建泛型服务

java - 如何使用正则表达式从字符串中提取时间?

java - 对文本文件使用 useDelimiter()

Java:使用字符串来停止 while 循环,并由以下扫描仪输入消耗

java - 如何设置 JTextArea 的大小?

java - JOptionPane 对话框 - 存在额外行的问题

java - 在 Java 中处理大型 MQ 对象

java - 扫描仪问题 - Java

java 使用计时器更改 JOptionPane 中 JTextArea 的内容