0

I am creating a tester class for a simple input database program. I do not have to store information nor delete anything, but there are two arrays in my the class I am running my tester class for.

This is my tester class:

import java.util.Scanner;

public class Asst_3 {

    private static Scanner keyboard;

    public Asst_3(){

        this.keyboard = new Scanner(System.in);
    }

    public static void main(String[]args){

        Policy insurance = new Policy();

        insurance.setCustomerLast(null);
        insurance.setCustomerFirst(null);
        insurance.setPolicyNumber();
        insurance.setAge();
        insurance.setAccidentNumber();
        insurance.setPremiumDueDate(00,00,0000);
        //insurance.toString();

        System.out.println("Welcome to Drive-Rite Insurance Company");
        showMenuOptions();

        Scanner keyboard = new Scanner(System.in);
        int choice = keyboard.nextInt();
        intiateMenuSelection(choice);
    }

    private static void intiateMenuSelection(int selectedOption) {
        switch (selectedOption){
        case 1: newPolicy(null);
            break;
        case 2: returnFromAge();
            break;
        case 3: returnFromDue();
            break;
        case 4: System.out.println("Goodbye");
                System.exit(0);
            break;
        default: break;
        }
    }

    private static void newPolicy(Policy insurance) {
        System.out.println("Enter Customer's Policy Number: ");
        int poliNum = keyboard.nextInt();
        insurance.getPolicyNumber();
        System.out.println("Customer's Policy Number is: " + keyboard.nextInt());

        System.out.println("Enter Customer's Last Name: ");
        String custLast = keyboard.nextLine();
        insurance.getCustomerLast();
        System.out.println("Customer's Last Name is: " + keyboard.nextInt());

        System.out.println("Enter Customer's First Name: ");
        String custFirst = keyboard.nextLine();
        insurance.getCustomerFirst();
        System.out.println("Customer's First Name is: " + keyboard.nextInt());

        System.out.println("Enter Customer's Age: ");
        int custAge = keyboard.nextInt();
        insurance.getAge();
        System.out.println("Customer's Age is: " + keyboard.nextInt());

        System.out.println("Enter Customer's Amount of Previous Accident Reaports in Past 3 years: ");
        int custAccident = keyboard.nextInt();
        insurance.getAccidentNumber();
        System.out.println("Customer's Amount of Accidents is: " + keyboard.nextInt());

        System.out.println("Enter Customer's next Premium Due Date: ");
        int dueDate = keyboard.nextInt();
        insurance.getPremiumDueDate();
        System.out.println("Customer's Next Due Date is: " + keyboard.nextInt());

        insurance.toString();

        showMenuOptions();
    }

    private static void returnFromDue() {

        showMenuOptions();
    }

    private static void returnFromAge() {

        showMenuOptions();
    }

    private static void returnToMenu() {

        intiateMenuSelection(0);
    }

    private static void showMenuOptions() {

        System.out.println("Choose a menu option: ");
        System.out.println("(1) Create New Policies");
        System.out.println("(2) Search by age");
        System.out.println("(3) Search by due date");
        System.out.println("(4) Exit");
        System.out.print("Input Option Number ---> ");
    }

}

And the Null Pointer Error:

Exception in thread "main" java.lang.NullPointerException
  at Asst_3.newPolicy(Asst_3.java:55)
  at Asst_3.intiateMenuSelection(Asst_3.java:40)
  at Asst_3.main(Asst_3.java:35)

This is the class I'm making my tester for:

import java.util.*;

public class Policy {

    private int policyNumber;
    private int age;
    private int accidentNumber;
    private String customerLast;
    private String customerFirst;
    private int [] months;
    private int [] premiumDueDate;

    public Policy() {

        this.policyNumber = 0;
        this.age = 0;
        this.accidentNumber = 0;
        this.customerLast = "";
        this.customerFirst = "";
        this.premiumDueDate = new int [3];
        this.premiumDueDate[0] = 0;
        this.premiumDueDate[1] = 0;
        this.premiumDueDate[2] = 0;
        this.months = new int [12];
        this.months[0] = this.months[2] = this.months[4] = this.months[6] = this.months[7] = this.months[9] = this.months[11] = 31;
        this.months[1] = 28;
        this.months[3] = this.months[5] = this.months[8] = this.months[10] = 30;
    }

    public int getPolicyNumber(){
        return this.policyNumber;
    }

    public void setPolicyNumber(){
        if(policyNumber < 1000){
            policyNumber = 0;
        }
        if(policyNumber > 9999){
            policyNumber = 0;
        }
    }

    public int[] getPremiumDueDate(){
        return this.premiumDueDate;
    }

    public void setPremiumDueDate(int month, int day, int year){
        this.premiumDueDate[0] = month;
        this.premiumDueDate[1] = day;
        this.premiumDueDate[2] = year;

        if(month < 0||month >= 12)
        {
            this.premiumDueDate[0] = 0;
            this.premiumDueDate[1] = 0;
            this.premiumDueDate[2] = 0;
        }
        else if(day < 0 || day > this.months[month])
        {
            this.premiumDueDate[0] = 0;
            this.premiumDueDate[1] = 0;
            this.premiumDueDate[2] = 0;
        }
    }

    public int getAge(){
        return this.age;
    }

    public void setAge(){
        this.age = 0;
    }

    public int getAccidentNumber(){
        return this.accidentNumber;
    }

    public void setAccidentNumber(){
        this.accidentNumber = 0;
    }

    public String getCustomerLast(){
        return this.customerLast;
    }

    public void setCustomerLast(String customerLast){
        this.customerLast = customerLast;
    }

    public String getCustomerFirst(){
        return this.customerFirst;
    }

    public void setCustomerFirst(String customerFirst){
        this.customerFirst = customerFirst;
    }

    public String toString(){
        return "\n Policy Number: " + this.policyNumber + "\n Customer Last Name: " + this.customerLast + "\n Customer First Name: " + this.customerFirst 
            + "\n Customer age: " + this.age + "\n Number of Accidents in Past Three Years: " + this.accidentNumber + "\n Premium Due Date: " + this.premiumDueDate;
    }

}

Thank you everyone, your amazing!

Here's my edited code:

The Tester

import java.util.Scanner;

public class Asst_3 {

private static Scanner keyboard;

public Asst_3(){

    this.keyboard = new Scanner(System.in);
}

public static void main(String[]args){

    System.out.println("Welcome to Drive-Rite Insurance Company");
    showMenuOptions();

    int choice = keyboard.nextInt();
    intiateMenuSelection(choice);
}

private static void intiateMenuSelection(int selectedOption) {
    switch (selectedOption){
    case 1: newPolicy(new Policy());
        break;
    case 2: returnFromAge();
        break;
    case 3: returnFromDue();
        break;
    case 4: System.out.println("Goodbye");
            System.exit(0);
        break;
    default: break;
    }
}

private static void newPolicy(Policy insurance) {
    System.out.println("Enter Customer's Policy Number: ");
    int poliNum = keyboard.nextInt();
    insurance.setPolicyNumber(poliNum);
    System.out.println("Customer's Policy Number is: " + insurance.getPolicyNumber());

    System.out.println("Enter Customer's Last Name: ");
    String custLast = keyboard.nextLine();
    insurance.setCustomerLast(custLast);
    System.out.println("Customer's Last Name is: " + insurance.getCustomerLast());

    System.out.println("Enter Customer's First Name: ");
    String custFirst = keyboard.nextLine();
    insurance.setCustomerFirst(custFirst);
    System.out.println("Customer's First Name is: " + insurance.getCustomerFirst());

    System.out.println("Enter Customer's Age: ");
    int custAge = keyboard.nextInt();
    insurance.setAge(custAge);
    System.out.println("Customer's Age is: " + insurance.getAge());

    System.out.println("Enter Customer's Amount of Previous Accident Reaports in Past 3 years: ");
    int custAccident = keyboard.nextInt();
    insurance.setAccidentNumber(custAccident);
    System.out.println("Customer's Amount of Accidents is: " + insurance.getAccidentNumber());

    System.out.println("Enter Customer's next Premium Due Date: ");
    int dueDate = keyboard.nextInt();
    insurance.setPremiumDueDate(dueDate, dueDate, dueDate);
    System.out.println("Customer's Next Due Date is: " + insurance.getPremiumDueDate());

    insurance.toString();

    returnToMenu();
}

private static void returnFromDue() {

    showMenuOptions();
}

private static void returnFromAge() {

    showMenuOptions();
}

private static void returnToMenu() {

    intiateMenuSelection(0);
}

private static void showMenuOptions() {

    System.out.println("Choose a menu option: ");
    System.out.println("(1) Create New Policies");
    System.out.println("(2) Search by age");
    System.out.println("(3) Search by due date");
    System.out.println("(4) Exit");
    System.out.print("Input Option Number ---> ");
}

}

And the class being tested:

import java.util.*;

public class Policy {

private int policyNumber;
private int age;
private int accidentNumber;
private String customerLast;
private String customerFirst;
private int [] months;
private int [] premiumDueDate;

public Policy() {

    this.policyNumber = 0;
    this.age = 0;
    this.accidentNumber = 0;
    this.customerLast = "";
    this.customerFirst = "";
    this.premiumDueDate = new int [3];
    this.premiumDueDate[0] = 0;
    this.premiumDueDate[1] = 0;
    this.premiumDueDate[2] = 0;
    this.months = new int [12];
    this.months[0] = this.months[2] = this.months[4] = this.months[6] = this.months[7] = this.months[9] = this.months[11] = 31;
    this.months[1] = 28;
    this.months[3] = this.months[5] = this.months[8] = this.months[10] = 30;
}

public int getPolicyNumber(){
    return this.policyNumber;
}

public void setPolicyNumber(int policyNumber){
    if(policyNumber < 1000){
        policyNumber = 0;
    }
    if(policyNumber > 9999){
        policyNumber = 0;
    }
}

public int[] getPremiumDueDate(){
    return this.premiumDueDate;
}

public void setPremiumDueDate(int month, int day, int year){
    this.premiumDueDate[0] = month;
    this.premiumDueDate[1] = day;
    this.premiumDueDate[2] = year;

    if(month < 0||month >= 12)
    {
        this.premiumDueDate[0] = 0;
        this.premiumDueDate[1] = 0;
        this.premiumDueDate[2] = 0;
    }
    else if(day < 0 || day > this.months[month])
    {
        this.premiumDueDate[0] = 0;
        this.premiumDueDate[1] = 0;
        this.premiumDueDate[2] = 0;
    }
}

public int getAge(){
    return this.age;
}

public void setAge(int age){
    this.age = 0;
}

public int getAccidentNumber(){
    return this.accidentNumber;
}

public void setAccidentNumber(int accidentNumber){
    this.accidentNumber = 0;
}

public String getCustomerLast(){
    return this.customerLast;
}

public void setCustomerLast(String customerLast){
    this.customerLast = customerLast;
}

public String getCustomerFirst(){
    return this.customerFirst;
}

public void setCustomerFirst(String customerFirst){
    this.customerFirst = customerFirst;
}

public String toString(){
    return "\n Policy Number: " + this.policyNumber + "\n Customer Last Name: " + this.customerLast + "\n Customer First Name: " + this.customerFirst 
        + "\n Customer age: " + this.age + "\n Number of Accidents in Past Three Years: " + this.accidentNumber + "\n Premium Due Date: " + this.premiumDueDate;
}

}

But now I have a new error after executing the program:

Welcome to Drive-Rite Insurance Company
Choose a menu option: 
(1) Create New Policies
(2) Search by age
(3) Search by due date
(4) Exit
Input Option Number ---> Exception in thread "main" java.lang.NullPointerException
    at Asst_3.main(Asst_3.java:23)

Here's an updated version with that NPE fixed:

    import java.util.Scanner;

    public class Asst_3 {

private static Scanner keyboard;

public static void main(String[]args){

    System.out.println("Welcome to Drive-Rite Insurance Company");
    showMenuOptions();


    this.keyboard = new Scanner(System.in);

    int choice = keyboard.nextInt();
    intiateMenuSelection(choice);
}

private static void intiateMenuSelection(int selectedOption) {
    switch (selectedOption){

    case 1: newPolicy(new Policy());
        break;

    case 2: returnFromAge();
        break;

    case 3: returnFromDue();
        break;

    case 4: System.out.println("Goodbye");
            System.exit(0);
        break;

    default: break;
    }
}

private static void newPolicy(Policy insurance) {
    System.out.println("Enter Customer's Policy Number: ");
    int poliNum = keyboard.nextInt();
    insurance.setPolicyNumber(poliNum);
    System.out.println("Customer's Policy Number is: " + insurance.getPolicyNumber());

    System.out.println("Enter Customer's Last Name: ");
    String custLast = keyboard.nextLine();
    insurance.setCustomerLast(custLast);
    System.out.println("Customer's Last Name is: " + insurance.getCustomerLast());

    System.out.println("Enter Customer's First Name: ");
    String custFirst = keyboard.nextLine();
    insurance.setCustomerFirst(custFirst);
    System.out.println("Customer's First Name is: " + insurance.getCustomerFirst());

    System.out.println("Enter Customer's Age: ");
    int custAge = keyboard.nextInt();
    insurance.setAge(custAge);
    System.out.println("Customer's Age is: " + insurance.getAge());

    System.out.println("Enter Customer's Amount of Previous Accident Reaports in Past 3 years: ");
    int custAccident = keyboard.nextInt();
    insurance.setAccidentNumber(custAccident);
    System.out.println("Customer's Amount of Accidents is: " + insurance.getAccidentNumber());

    System.out.println("Enter Customer's next Premium Due Date: ");
    int dueDate = keyboard.nextInt();
    insurance.setPremiumDueDate(dueDate, dueDate, dueDate);
    System.out.println("Customer's Next Due Date is: " + insurance.getPremiumDueDate());

    insurance.toString();

    returnToMenu();
}

private static void returnFromDue() {

    showMenuOptions();
}

private static void returnFromAge() {

    showMenuOptions();
}

private static void returnToMenu() {

    intiateMenuSelection(0);
}

private static void showMenuOptions() {

    System.out.println("Choose a menu option: ");
    System.out.println("----------------------------------------");
    System.out.println("(1) Create New Policies");
    System.out.println("(2) Search by age");
    System.out.println("(3) Search by due date");
    System.out.println("(4) Exit");
    System.out.print("Input Option Number ---> ");
}

}

The errors are I'm having issues with they keyboard variables.

4 Answers4

2

null pointer occurring in

private static void newPolicy(Policy insurance) 

this method. For these lines

insurance.getPolicyNumber();

insurance.get....();

insurance.get....();

because the reference/object insurance coming as a parameter from where its being called . in you case you are passing null to the method

newPolicy(null); //try to pass a reference of Policy  like  'newPolicy(new Policy())' .
Saif
  • 6,804
  • 8
  • 40
  • 61
  • So like: newPolicy(get.PolicyNumber, etc) rather than inputting null? – user3751018 Jun 18 '14 at 06:26
  • no. it should be like `newPolicy(new Policy())` rather than giving null; @user3751018 – Saif Jun 18 '14 at 06:29
  • Alright that fix that error, but now I have a NPE in the place that the user must input their option: `Welcome to Drive-Rite Insurance Company` `Choose a menu option:` `(1) Create New Policies` `(2) Search by age` `(3) Search by due date` `(4) Exit` `Input Option Number ---> Exception in thread "main"` `java.lang.NullPointerException `at Asst_3.main(Asst_3.java:33)` – user3751018 Jun 18 '14 at 06:32
  • i cant guess the problem from this. need the full error Log like you have given in the question . by the way if the problem is solved you can mark the useful answer as 'accept' among all the answers . @user3751018 – Saif Jun 18 '14 at 06:38
  • and additionally you have to remove `Scanner` keyword from `Scanner keyboard = new Scanner(System.in);` as @Jens said. – Saif Jun 18 '14 at 06:42
  • `Input Option Number ---> Exception in thread "main"` `java.lang.NullPointerException` `at Asst_3.main(Asst_3.java:33)` – user3751018 Jun 18 '14 at 06:43
  • try to give the updated code in the question and paste the full Log – Saif Jun 18 '14 at 07:33
  • I already posted the updated question, along with the full log of the error – user3751018 Jun 18 '14 at 07:47
1

You're shadowing you variables, that is, you've declared keyboard as a class variable

public class Asst_3 {

    private static Scanner keyboard;

But in the main, you've re-declared it as a local variable...

Scanner keyboard = new Scanner(System.in);

Which means that the class variable is still null when you call newPolicy.

Start by removing the re-declaration...

//Scanner keyboard = new Scanner(System.in);
keyboard = new Scanner(System.in);

Which will lead you smack bang into you next NullPointerException in newPolicy

insurance.getPolicyNumber();

Caused by the fact that you call the method passing it a null value...

newPolicy(null);

I'll leave you to fix that ;)

Hint: newPolicy should take no parameters and should return an new instance of Policy which can then manipulated by the other methods ;)

MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
1

You declare keybord twice.

remove the Scanner from this line:

Scanner keyboard = new Scanner(System.in);

So you have:

keyboard = new Scanner(System.in);
Jens
  • 67,715
  • 15
  • 98
  • 113
0

The insurance that you are passing to newPolicy is null

case 1: newPolicy(null);

hence

insurance.getPolicyNumber();

will throw a NPE

Scary Wombat
  • 44,617
  • 6
  • 35
  • 64