catdu
catdu

Reputation: 11

NoSuchElementException on .nextInt();

I am trying to write a program that reads the information of several user bank accounts and performs certain operations on them (withdraw, deposit, show balance) etc. The code seems to be correct, but I am having an issue with the .nextInt(); method.

Here is my code:

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

public class Topic_7_HW {
    public static void printAcct(Scanner inputFile, PrintWriter outputFile, int[] acctNum, double[] balance,
            int numAccts) {
        for (int n = 0; n <= numAccts; n++) {
            outputFile.printf("\n %1f Account Number: ", acctNum[n]);
            outputFile.printf("\n %1f Account Balance: ", balance[n]);
        }
    }

    public static int readAccts(Scanner inputFile, PrintWriter outputFile, int[] acctNum, double[] balance) {
        int numAccts = 0;
        while (inputFile.hasNext()) {
            acctNum[numAccts] = inputFile.nextInt();
            balance[numAccts] = inputFile.nextDouble();
            numAccts++;
        }
        return numAccts;
    }

    public static int findAcct(Scanner inputFile, PrintWriter outputFile, int[] acctNum, int numAccts, int account) {
        account = inputFile.nextInt();
        if (account != -1) {
            for (int n = 0; n <= numAccts; n++) {
                if (account == acctNum[n])
                    ;
                account = acctNum[n];
            }
        } else
            outputFile.printf("\n %1s Error; requested account does not exist. ");
        return account;
    }

    public static void withdrawal(Scanner inputFile, PrintWriter outputFile, int[] acctNum, double[] balance,
            int numAccts) {
        int account = -1;
        double wd = -1.0;
        account = findAcct(inputFile, outputFile, acctNum, numAccts, account);
        boolean acct_vld;
        if (account != -1)
            acct_vld = true;
        if (acct_vld = true) {
            outputFile.printf(
                    "%1d Withdrawing money from account ID: \n%1d Current balance: \n %1d Enter amount to withdraw: ",
                    acctNum[account], balance[account], wd);

            wd = inputFile.nextDouble();
            if (balance[account] < wd)
                outputFile.printf("\n %1s Invalid withdraw amount: Amount cannot exceed balance. ");
            if (wd < 0)
                outputFile.printf("\n %1s Invalid withdraw amount: Cannot withdraw negative dollars. ");
            else {
                balance[account] -= wd;
                outputFile.print("\n%1s Successfully withdrew $" + wd + " from account " + account);
            }
        }
    }

    public static void deposit(Scanner inputFile, PrintWriter outputFile, int[] acctNum, double[] balance,
            int numAccts) {
        int account = -1;
        double dp = 0;
        account = findAcct(inputFile, outputFile, acctNum, numAccts, account);
        boolean acct_vld;
        if (account != -1)
            acct_vld = true;
        else
            acct_vld = false;
        if (acct_vld = true) {
            outputFile.printf(
                    "%1d Depositing money into account ID: \n%1d Current balance: \n %1d Enter amount to deposit: ",
                    acctNum[account], balance[account], dp);

            dp = inputFile.nextDouble();
            if (dp < 0 || dp == 0)
                outputFile.printf("\n %1s Invalid withdraw amount: Cannot withdraw negative/zero dollars. ");
            else {
                balance[account] += dp;
            }
            outputFile.print("\n%1s Successfully deposited $" + dp + " Into account " + account + ". new balance is: "
                    + balance[account] + ".");
        }
    }

    public static int newAcct(Scanner testCases, PrintWriter outputFile, int[] acctNum, double[] balance,
            int numAccts) {
        int account = -1;
        boolean exist;
        outputFile.printf("Creating New account. \n Please enter account number.");
        for (int n = 0; n <= numAccts; n++) {
            if (account == acctNum[n])
                ;
            exist = true;
        }
        if (exist = true) {
            outputFile.printf("\nChoose new ID. Account already exists.");
            return account;
        } else {
            acctNum[account] = testCases.nextInt();
            balance[account] = testCases.nextDouble();
            outputFile.printf("\n Account successfully created. Account number is: %1d Current Balance is %1.2d",
                    acctNum[account], balance[account]);
            return account;
        }
    }

    public static void balance(Scanner inputFile, PrintWriter outputFile, int[] acctNum, double[] balance,
            int numAccts) {
        int account = -1;
        account = findAcct(inputFile, outputFile, acctNum, numAccts, account);
        for (int n = 0; n <= numAccts; n++) {
            if (account == acctNum[n]) {
                account = acctNum[n];
                outputFile.printf("%1d", balance[n]);
            } else
                outputFile.printf("%1s Error; requested account does not exist");
        }
    }

    public static void menu() {
        System.out.println("Please make a selection.");
        System.out.println("W - Withdraw");
        System.out.println("D - Deposit");
        System.out.println("B - Check Balance");
        System.out.println("N - Make New Account");
        System.out.println("Q - Quit");
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        PrintWriter outputFile;
        outputFile = new PrintWriter("hw_7_out.txt");
        File myinputFile = new File("C:\\Users\\chroZ\\eclipse-workspace\\Topic_7\\src\\hw7input.txt");
        Scanner inputFile = new Scanner(myinputFile);
        File mytestcases = new File("C:\\Users\\chroZ\\eclipse-workspace\\Topic_7\\src\\hw7testcases.txt");
        Scanner testCases = new Scanner(mytestcases);
        char slct;
        final int max_acct = 50;
        int notDone = 20;
        double[] balance;
        balance = new double[max_acct];
        int[] acctNum;
        acctNum = new int[max_acct];
        int numAccts;
        numAccts = readAccts(inputFile, outputFile, acctNum, balance);
        // create a loop that calls the menu method and calls the selected action method
        do {
            menu();
            String choice = testCases.next();
            slct = choice.charAt(0);
            switch (slct) {
            // tell switch statement which method to call depending on the user's input
            case 'W', 'w': withdrawal(inputFile, outputFile, acctNum, balance, numAccts);
                break;
            case 'D', 'd': deposit(inputFile, outputFile, acctNum, balance, numAccts);
                break;
            case 'B', 'b': balance(inputFile, outputFile, acctNum, balance, numAccts);
                break;
            case 'N', 'n': newAcct(inputFile, outputFile, acctNum, balance, numAccts);
                break;
            // declare notDone as the numerical value for F if user wants to quit
            case 'Q', 'q':
                notDone = 6;
                break;
            // prints an error if the input is anything other than the availible selections
            default:
                outputFile.printf("\n%1s", "Error; Invalid selection.");
            }
        } while (notDone == 20);
        printAcct(inputFile, outputFile, acctNum, balance, numAccts);
        outputFile.printf("In total, there are " + numAccts + " accounts.");
        outputFile.flush();
        inputFile.close();
        outputFile.close();
        testCases.close();
    }

}

and here is what is being read from inputFile:

2616 19788.01
7187 3402.67
9685 210.99
1190 762062.84
9013 23186.65
2257 307.77
9062 16.4
8836 340837.14
9439 26802.80
2435 2025.25
7563 80687.21

It is supposed to read the account number and take that as next int, but instead, I am getting a nosuchelementexception on lines; 24, 40, and 159 which are(in order):

 24 account = inputFile.nextInt();
 40 account = findAcct(inputFile, outputFile, acctNum, numAccts, account);
159 case 'W', 'w': withdrawal(inputFile, outputFile, acctNum, balance, numAccts);

Upvotes: 1

Views: 56

Answers (0)

Related Questions