title: NoSuchElementException and Eclipse
body: <p>I have posted here before about this project and that question was answered by the wonderful community here. I'm creating a vending machine that reads text files, creates an array of the items in the text file and prints them to the user, and the user makes their choice. I've hit another snag.</p>
  
  <p>So my program works fine in eclipse, I encounter zero problems and I've dealt with most every exception I could think of.</p>
  
  <p>The problem comes when I run my program through my courses grade checker that compares my program with an expected output. In other words, it shows how the program should be running and what values should be returned when run.</p>
  
  <p>Now the program isn't printing the same values as the expected, which I would think would have resulted in a FileNotFoundException since I'm not uploading the text files so that confuses me on one hand. When it comes time to select an item from the machine, I'm getting a NoSuchElementException. I have no idea why it would do this in the checker but work fine in Eclipse. Any insight is much appreciated.</p>
  
  <p>VendingMachine.java</p>
  
  <pre><code>import java.io.*;
  import java.util.*;
  
  import java.text.NumberFormat;
  /*************************************************************************
  * Simulates a real life vending machine with stock read from a file.
  * 
  * CSCE 155A Spring 2016
  * Assignment 4
  * @file VendingMachine.java
  * @author Jeremy Suing
  * @version 1.0
  * @date March 7, 2016
  *************************************************************************/
  public class VendingMachine {
  
  //data members
  private Item[] stock;  //Array of Item objects in machine
  private double money;  //Amount of revenue earned by machine
  
  
  /*********************************************************************
   * This is the constructor of the VendingMachine class that take a
   * file name for the items to be loaded into the vending machine.
   *
   * It creates objects of the Item class from the information in the 
   * file to populate into the stock of the vending machine.  It does
   * this by looping the file to determine the number of items and then
   * reading the items and populating the array of stock. 
   * 
   * @param filename Name of the file containing the items to stock into
   * this instance of the vending machine. 
   * @throws FileNotFoundException If issues reading the file.
   *********************************************************************/
  public VendingMachine(String filename) throws FileNotFoundException{
          //Open the file to read with the scanner
          File file = new File(filename);
          Scanner scan = new Scanner(file);
  
          //Determine the total number of items listed in the file
          int totalItem = 0;
          while (scan.hasNextLine()){
          scan.nextLine();
          totalItem++;
      } //End while another item in file
      //Create the array of stock with the appropriate number of items
      stock = new Item[totalItem];
      scan.close();
  
      //Open the file again with a new scanner to read the items
      scan = new Scanner(file);
      int itemQuantity = -1;
      double itemPrice = -1;
      String itemDesc = "";
      int count = 0;
      String line = "";
  
      //Read through the items in the file to get their information
      //Create the item objects and put them into the array of stock
      while(scan.hasNextLine()){
          line = scan.nextLine();
          String[] tokens = line.split(",");
          try {
              itemDesc = tokens[0];
              itemPrice = Double.parseDouble(tokens[1]);
              itemQuantity = Integer.parseInt(tokens[2]);
  
              stock[count] = new Item(itemDesc, itemPrice, itemQuantity);
              count++;
          } catch (NumberFormatException nfe) {
              System.out.println("Bad item in file " + filename + 
                      " on row " + (count+1) + ".");
          }
      } //End while another item in file
  
      scan.close();
  
      //Initialize the money data variable.
      money = 0.00;
  
  } //End VendingMachine constructor
  
  //To run the successful transaction
  public void vend(double userInput, String userInput2) {
      NumberFormat d = NumberFormat.getCurrencyInstance();
      Scanner input = new Scanner(System.in);
      boolean a = false;
      boolean b = false;
  
      String item = new String(userInput2);
      double userMoney = userInput;
      int errorNum = 0;
      double addMoney = 0;
      int itemSelect = 0;
  
  
      if (userMoney==-4){
          //errorNum=-4;
          //this.outputMessage(userInput, errorNum);
          a = true;
          b=true;
      }
      while(!a){
          b=false;
          System.out.println("You now have " + d.format(userMoney) + " to spend. Please make a selection (enter 0 to exit): ");
          item = input.next();
          do{
              try{
                  itemSelect = Integer.parseInt(item);
              } catch (InputMismatchException e){
                  System.out.println("Invalid Entry!");
                  System.out.println("You now have " + d.format(userInput) + " to spend. Please make a selection (enter 0 to exit): ");
              }
          }while(!checkNum(item));
  
          while(!b){
              if(itemSelect==0){
                  System.out.println("You did not buy anything from this vending machine. Your change is " + d.format(userMoney));
                  b=true;
                  a=true;
              } else if ((userMoney-stock[itemSelect-1].itemPrice)&lt;0.00){
                  errorNum=-1;
                  this.outputMessage(userMoney, errorNum);
                  addMoney = input.nextDouble();
                  if (addMoney==-1){
                      errorNum = -3;
                      this.outputMessage(userMoney, errorNum);
                      b=true;
                      a=true;
                  }
                  userMoney = userMoney + addMoney;
                  b=true;
              } else if (stock[itemSelect-1].itemQuantity==0){
                  errorNum = -2;
                  this.outputMessage(userMoney, errorNum);
                  b=true;
              } else {
                  userMoney = userMoney-stock[itemSelect-1].itemPrice;
                  money = (money + stock[itemSelect-1].itemPrice);
                  this.outputMessage(userMoney, itemSelect);
  
                  stock[itemSelect-1].itemQuantity = stock[itemSelect-1].itemQuantity - 1;
  
                  b=true;
                  a=true;
              }
  
  
          }
  
  
  
      }
  
  }
  
  //To determine whether or not the transaction was successful 
  public void outputMessage(double userInput, int userInput2) {
      NumberFormat d = NumberFormat.getCurrencyInstance();
      if(userInput2==-1){
          System.out.println("You do not have enough money. Please add more money or exit.");
          System.out.println("Please enter some money into the machine (enter -1 to exit): ");
      } else if (userInput2==-2) {
          System.out.println("Sorry, we are out of this item.");
      } else if (userInput2==-3) {
          System.out.println("You are exiting the vending machine. Your change is " + d.format(userInput));
      } else {
          System.out.println("You have purchased " + stock[userInput2-1].itemDesc + " for " + d.format(stock[userInput2-1].itemPrice) + ". Your change is " + d.format(userInput) + ".");
  
      }
  
  
  
  }
  
  //To print the items in held in stock
  public void printMenu()  {
      System.out.println("Item#" + "\t" + "Item" + "\t  " + "Price" + "\t  " + "Qty");
      for(int i=0; i&lt;stock.length;i++){
          System.out.println( (i+1) + "\t" + stock[i]);
      }
  
  }
   public static boolean checkNum(String userInput) {
  
       try {
  
           Integer.parseInt(userInput);
  
           return true;
  
       } catch (NumberFormatException e) {
  
           return false;
       }   
   }
  public double getMoney() {
      return money;
  }
  
  
  
  } //End VendingMachine class definition
  </code></pre>
  
  <p>Item.java</p>
  
  <pre><code>import java.util.*;
  import java.text.NumberFormat;
  
  public class Item {
  String itemDesc;
  double itemPrice;
  int itemQuantity;
  
  public Item (String itemDesc, double itemPrice, int itemQuantity){
  
      this.itemDesc = itemDesc;
      this.itemPrice = itemPrice;
      this.itemQuantity = itemQuantity;
  }
  public String toString(){
      NumberFormat d = NumberFormat.getCurrencyInstance();
      return itemDesc + "\t" + " " + d.format(itemPrice) + "\t" + " " + itemQuantity + "\t";
  }
  </code></pre>
  
  <p>}</p>
  
  <p>VendingMachineDriver.java</p>
  
  <pre><code>import java.util.*;
  import java.io.*;
  import java.text.NumberFormat;
  public class VendingMachineDriver {
  
  
  
  public static void main(String args[]) throws FileNotFoundException {
      Scanner input = new Scanner(System.in);
      //String vendingSelect = input.next();
      String a = new String("a");
      String b = new String("b");
      String x = new String("x");
      String item = "0";
      boolean exit = false;
      VendingMachine drinks = new VendingMachine("drinks");
      VendingMachine snacks = new VendingMachine("snacks");
      NumberFormat d = NumberFormat.getCurrencyInstance();
  
      while(!exit){
          boolean c = false;
          System.out.println("Welcome to Jeremy's Super Vending Machines!");
          System.out.println("Please select a vending machine:");
          System.out.println("A-Drinks, B-Snacks, X-Exit");
          String vendingSelect = input.next();
  
          while(!c){
              if(a.equalsIgnoreCase(vendingSelect)){
  
                  drinks.printMenu();
                  System.out.println("Please enter some money into the machine (enter -1 to exit)");
                  double money = input.nextDouble();
  
                  if (money==-1){
                      System.out.println("You did not buy anything from this vending machine. Your change is " + d.format(0) + "." );
                      c = true;
  
                  } else {
                      System.out.println("You now have " + d.format(money) + " to spend. Please make a selection (enter 0 to exit): ");
                      item = input.next();
                      drinks.vend(money, item);
                      c=true;
  
                  }
  
  
  
              }
  
              else if(b.equalsIgnoreCase(vendingSelect)){
                  snacks.printMenu();
                  System.out.println("Please enter some money into the machine (enter -1 to exit)");
                  double money = input.nextDouble();
  
                  if (money==-1){
                      System.out.println("You did not buy anything from this vending machine. Your change is " + d.format(0) + "." );
                      c = true;
  
                  }
                  else {
                      System.out.println("You now have " + d.format(money) + " to spend. Please make a selection (enter 0 to exit): ");
                      item = input.next();
  
                      snacks.vend(money, item);
                      c=true;
  
                  }
              } else if(x.equalsIgnoreCase(vendingSelect)){
                  double errorNum = -4;
                  snacks.vend(errorNum, item);
                  System.out.println("The vending machines made a total of " + d.format(drinks.getMoney()) + "." );
                  System.out.println("Thank you for your business!");
                  c=true;
                  exit=true;
              }
  
          }
  
  
      }
  
  
  
  }
  }
  </code></pre>