-1

So I have this code :

package Firstpack;

import java.io.*;
import java.util.*;

public class Main {

    public static void menu() {
        System.out.println("Welcome");
        System.out.println("1. Add a record ");
        System.out.println("2. See all records ");
        System.out.println("3. See a category");
        System.out.println("4. Total spend(Year)");
        System.out.println("5. Spend in a month");
        System.out.println("6. Chose by index");
        System.out.println("7. Exit ");

        System.out.print(">");
        Scanner in = new Scanner(System.in);
        int enteredInt = in.nextInt();
        in.close();

        switch (enteredInt) {
        case 1:
            recording();
            break;
        case 2:
            System.out.print(" You have chosen -> See all records");
            break;
        case 3:
            System.out.print(" You have chosen -> See a category");
            break;
        case 4:
            System.out.print(" You have chosen -> Total spend(Year)");
            break;
        case 5:
            System.out.print(" You have chosen -> Spend in a month");
            break;
        case 6:
            System.out.print(" You have chosen -> Chose by index");
            break;
        case 7:
            System.out.print(" Bye! ");
            break;
        default:
            menu();
        }

    }

    public static void recording() {
        System.out.println(" You have chosen -> Add a record");

        record rec = new record();
        Scanner in = new Scanner(System.in);

        System.out.print("Enter Amount > ");
        rec.amount = in.nextDouble();
        System.out.print("Enter Category > ");
        rec.category = in.next();
        System.out.print("Enter Details > ");
        rec.details = in.next();

        try {
            FileWriter fw = new FileWriter("findme.txt");
            BufferedWriter bw = new BufferedWriter(fw);

            bw.write(String.valueOf(rec.amount));
            bw.write(rec.category);
            bw.write(rec.details);

            bw.close();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        menu();
    }
}

And it throws me this:

Exception in thread "main" java.lang.NullPointerException
    at java.io.Writer.write(Unknown Source)
    at Firstpack.Main.recording(Main.java:68)
    at Firstpack.Main.menu(Main.java:25)
    at Firstpack.Main.main(Main.java:82)

And I have no idea how to solve this. What is wrong here?

user229044
  • 232,980
  • 40
  • 330
  • 338
user1134746
  • 71
  • 4
  • 9

1 Answers1

1

The problem is because of the call to in.close() in your menu method. Not only does in.close() close the Scanner object, but it also happens to close System.in as well. When you enter 1 as the menu selection your recording() method gets called which creates a new Scanner which tries to use the now closed System.in.

This is a post that addresses a similar issue: Trying to write a method that checks user input in JAVA, getting NoSuchElementException

Community
  • 1
  • 1
Mike Nadaud
  • 106
  • 3