2014-10-15 1 views
0

Java에서 수행 할 학교 임무가 있으므로 프로그램을 만들었지 만 출력물을 제공하지 않습니다. 임 아직 초급 그래서 그 문제를 해결하는 데 도움이 PLZ. 내 코드의 첫 번째 절반은 joptionpane을 사용하지만 콘솔에 출력을 표시하려고합니다. 당신이 개체의 인스턴스를 만들 때java NullPointerException 오류입니다. 출력 없음

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

, 당신은 초기화하는 방법을 문의 : 당신은 기본적으로 아무것도 초기화되지 않은 값의 무리가

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); 

    } 

} 
+3

stacktrace에서 무엇을 말합니까? – Reimeus

+0

스택 트레이스는 어디에 있습니까? 또한 콘솔 만 사용하려면'JOptionPane'과 같은 스윙 위젯을 사용하지 마십시오. 당신은'BufferedReader'와'InputStreamReader' 클래스를 보길 원할 것입니다. – toddlermenot

+4

주 : main()의 모든 문은 새로운 payroll2 객체를 만들고, 거기에 메소드를 호출 한 다음 * throw합니다. getPayroll() 메소드는 참조 생성자의 모든 필드를 'null'로 초기화 한 기본 생성자로 생성 된 객체에서 호출됩니다. –

답변

3

이 내 코드입니다 그들 :

new payroll2().SetPayrollDetail(); 

그러나 당신이 인스턴스를 보관하지 않습니다. 당신은 즉시 완전히 새로운 인스턴스를 생성하고 작동하도록 시도 :

new payroll2().SetBonus(); 

이 새로운 인스턴스는 값이 아무것도 초기화 없었다 않았다. 그래서 그 값들을 사용할 수 없습니다. 당신은 payroll2의 인스턴스마다 다시 만들

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

당신이 작업을 대신, 당신은 당신이 그에서 작동 할 수 있도록 원래의 인스턴스를 유지 싶어요. 단일 인스턴스를 사용하십시오.

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

또한 메소드는 대문자로 된 작은 문자로 시작해야합니다.