Exception in thread "main" java.util.NoSuchElementException

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • monkey0525
    New Member
    • Apr 2010
    • 11

    #1

    Exception in thread "main" java.util.NoSuchElementException

    Each time I run the ProgTwo program, it displays:

    1. Display one product
    2. Display all products
    3. Add a new CD
    6. Exit

    Enter your choice: Exception in thread "main" java.util.NoSuc hElementExcepti on
    at java.util.Scann er.throwFor(Sca nner.java:838)
    at java.util.Scann er.next(Scanner .java:1461)
    at java.util.Scann er.nextInt(Scan ner.java:2091)
    at java.util.Scann er.nextInt(Scan ner.java:2050)
    at ProgTwo.main(Pr ogTwo.java:31)

    What exactly does "Exception in thread "main" java.util.NoSuc hElementExcepti on" mean and how can I fix it so my program runs properly?

    Code:
    import java.io.*;
    import java.text.NumberFormat;
    
    public class Product
    {
       private String name;
    	private double price;
    	private int idNum;
    	private int quantity;
    	
    	public Product (int id, String title, double cost, int total) 
    	{
    		id = idNum;
    		name = title;
    		price = cost;
    		quantity = total;
    	}
    
       //-----------------------------------------------------------------
       //  Returns the product's ID number.
       //-----------------------------------------------------------------
    
    	public int getID()
    	{
    	   return idNum;
    	}
    		
       //-----------------------------------------------------------------
       //  Returns the product's name.
       //-----------------------------------------------------------------
    	
    	public String getName()
    	{
    	   return name;
    	}
    	
    	
       //-----------------------------------------------------------------
       //  Returns the product's price.
       //-----------------------------------------------------------------
    	
    	public double getPrice()
    	{
    	   return price;
    	}
    	
       //-----------------------------------------------------------------
       //  Returns the quantity in inventory.
       //-----------------------------------------------------------------
    	
    	public int getQuantity()
    	{
    	   return quantity;
    	}
    	
       //-----------------------------------------------------------------
       //  Returns a printablle version of the product object.
       //-----------------------------------------------------------------
     
       public String toString()
       {
          NumberFormat fmt = NumberFormat.getCurrencyInstance();
    
          String description;
    
          description = fmt.format(price) + "\t" + quantity + "\t";
          description += idNum + "\t" + name;
    
          return description;  
       }
    }
    Code:
    import java.text.NumberFormat;
    
    public class ProductCollection
    {
       private Product[] collection;
       private int count;
    	private double totalCost;
    
       //-----------------------------------------------------------------
       //  Constructor: Creates an initially empty collection.
       //-----------------------------------------------------------------
       public ProductCollection ()
       {
          collection = new Product[100];
          count = 0;
    		totalCost = 0.0;
       }
    
       //-----------------------------------------------------------------
       //  Adds a product to the collection.
       //-----------------------------------------------------------------
    	
       public void addProduct (int prodID, String prodName, double unitPrice, int prodQty)
       {
          if (count == collection.length)
             increaseSize();
       
          int index = findProduct(prodID);
          
          if (index == -1)
          {
              collection[count] = new Product (prodID, prodName, unitPrice, prodQty);
              totalCost += unitPrice;
              count++;
          }
          else
              System.out.println("Product was not added, a product having the ID number " + prodID 
                                + " was found.");
       }
    	
       //-----------------------------------------------------------------
       //  Increases the size of the product to the collection.
       //-----------------------------------------------------------------
    		
    	private void increaseSize ()
       {
          Product[] temp = new Product[collection.length * 2];
    
          for (int prod = 0; prod < collection.length; prod++)
             temp[prod] = collection[prod];
    
          collection = temp;
    	}
    	
       //-----------------------------------------------------------------
       //  Finds product from collection.
       //-----------------------------------------------------------------
    		
    	public int findProduct(int prodID)
       {
    	   int index = -1;
          for (int i = 0; i < count; i++)
          if (collection[i].getID() == prodID)
              index = i;
          return index;
    	}
    	
       //-----------------------------------------------------------------
       //  Deletes product from the collection.
       //-----------------------------------------------------------------
    	
    	public void deleteProduct(int prodID)
    	{
    	   int index = findProduct(prodID);
    
    		if (index > -1)
          {
    			for (int i = index; i < count; i++)
    		   {
    			   collection[i] = collection[i+1];
    			   count--;
    			}
    		}
    		else System.out.println("A product having the ID number " + prodID 
                                + " was not found.");
    	}
    	
       //-----------------------------------------------------------------
       //  Displays product from the collection.
       //-----------------------------------------------------------------
    		
    	public void displayProduct(int prodID)
    	{
          int index = findProduct(prodID);
          if (index > -1)
             System.out.println(collection[index]);
          else
             System.out.println("A product having the ID number " + prodID 
                                + " was not found.");	
    	}
    	
       //-----------------------------------------------------------------
       //  Returns a report describing the Product collection.
       //-----------------------------------------------------------------
    	
    	   public String createOutputFile()
       {
          String data = "";
          for (int i = 0; i < count; i++)
          {
              data += collection[i].getID() + ",";
              data += collection[i].getName() + ",";
              data += collection[i].getPrice() + ",";
              data += collection[i].getQuantity() + ",\n";
          }
          return data;
       }
    	
       public String toString()
       {
          NumberFormat fmt = NumberFormat.getCurrencyInstance();
    
          String report = "-------------------------------------------\n";
          report += "My Product Collection\n\n";
    
          report += "Number of products: " + count + "\n";
          report += "Total cost: " + fmt.format(totalCost) + "\n";
          report += "Average cost: " + fmt.format(totalCost/count);
    
          report += "\n\nCD List:\n\n";
    
          for (int cd = 0; cd < count; cd++)
             report += collection[cd].toString() + "\n";
    
          return report;
       }
    
    }
    Code:
    import java.util.Scanner;
    import java.io.*;
    
    public class ProgTwo
    {
       public static void main (String[] args) throws FileNotFoundException, IOException
       {
          Scanner scan = new Scanner(new File("productin.txt"));
          ProductCollection data = new ProductCollection ();
          String name = null;
          double price = 0.0;
          int idNum = 0, quantity = 0, input = 0;
    		
    		while (scan.hasNextLine())
          {
             scan.useDelimiter(",");
    			idNum = scan.nextInt();
             name = scan.next();
             price = scan.nextDouble();
             quantity = scan.nextInt();
             scan.nextLine();
             data.addProduct (idNum, name, price, quantity);
          }
             do
             { 
    		      System.out.println("1. Display one product");
    			   System.out.println("2. Display all products");
                System.out.println("3. Add a new product");
                System.out.println("6.  Exit");
                System.out.print("\nEnter your choice: ");
                input = scan.nextInt();
    						
                switch (input)
                {
    		case 1:  System.out.print("Enter the ID number of the product to display: " );
                                         idNum = scan.nextInt();
                                         data.displayProduct(idNum);
    			 break; 
    		case 2:  System.out.println (data);
    		             break; 
                            case 3:  System.out.print("Enter the ID number: ");								
                            idNum =scan.nextInt();
                            System.out.print("Enter the name: " );
                            name = scan.nextLine();
                            System.out.print("Enter the price: " );
                            price = scan.nextDouble();
                            System.out.print("Enter the quantity: ");
                            quantity = scan.nextInt();
                            data.addProduct(idNum, name, price, quantity);
                            System.out.println(data);                   
                            break;
                }
             } while (input != 6);
    
          FileWriter fw = new FileWriter("productout.txt");
          BufferedWriter bw = new BufferedWriter(fw);
          PrintWriter pw = new PrintWriter(bw);
    
          pw.println(data.createOutputFile());
          pw.close();
    	}
    }
  • Dheeraj Joshi
    Recognized Expert Top Contributor
    • Jul 2009
    • 1129

    #2
    How does your input looks like?

    I suspect your program tries to fetch value of choice from input string, and you have not mentioned the input.

    Regards
    Dheeraj Joshi

    Comment

    • monkey0525
      New Member
      • Apr 2010
      • 11

      #3
      The input is an integer whose value is zero. My program doesn't allow me to add any information in, it just displays the above message.

      Comment

      • Dheeraj Joshi
        Recognized Expert Top Contributor
        • Jul 2009
        • 1129

        #4
        Put some debug statements and display the value of all variable in ProgTwo class line number 32.

        Check the output of debug statement and verify whether the input is correct on not.

        Regards
        Dheeraj Joshi

        Comment

        • monkey0525
          New Member
          • Apr 2010
          • 11

          #5
          Pardon my ignorance, but how can I do that?

          Comment

          • Dheeraj Joshi
            Recognized Expert Top Contributor
            • Jul 2009
            • 1129

            #6
            Put some print statements. Basically that is just to make sure that, you are able to
            fetch all the values.

            If you are using some IDE like netbeans or eclipse, please debug the code and see the local variable values as scanner picks the data.

            Regards
            Dheeraj Joshi

            Comment

            • jkmyoung
              Recognized Expert Top Contributor
              • Mar 2006
              • 2057

              #7
              Ah! You're using the same scanner that you used on the file to try and get user output, correct? Of course it throws an error, because we're already done reading the file; but that's not where you want to read from.

              Create a new scanner:
              Code:
              Scanner userInput = new Scanner(System.in)
              ...
              System.out.print("\nEnter your choice: "); 
              input = userInput.nextInt();

              Comment

              Working...