2017-03-27 60 views
0

這裏是我的代碼:的Java錯誤無法保留的對象堆足夠的空間

import java.util.LinkedList; 
import java.util.Scanner; 
import java.util.InputMismatchException; 
import java.util.*; 




class Customer { 
     public String lastName; 
     public String firstName; 
     public Customer() { 
     } 
     public Customer(String last, String first) { 
      this.lastName = last; 
      this.firstName = first; 
     } 
     public String toString() { 
      return firstName + " " + lastName; 
     } 
    } 
    class HourlyCustomer extends Customer { 
     public double hourlyRate; 
     public HourlyCustomer(String last, String first) { 
      super(last, first); 
     } 
    } 

class GenQueue<E> { 
    private LinkedList<E> list = new LinkedList<E>(); 
    public void enqueue(E item) { 
     list.addLast(item); 
    } 
    public E dequeue() { 
     return list.poll(); 
    } 
    public boolean hasItems() { 
     return !list.isEmpty(); 
    } 
    public boolean isEmpty() 
    { 
     return list == null; 
    } 
    public E removeFirst(){ 
     return list.removeFirst(); 
    } 
    public E getFirst(){ 
     return list.getFirst(); 
    } 
    public int size() { 
     return list.size(); 
    } 

    public void addItems(GenQueue<? extends E> q) { 
     while (q.hasItems()) list.addLast(q.dequeue()); 
    } 
} 





public class something { 

    public static void main(String[] args){ 
     Scanner sc = new Scanner(System.in); 
     String input1; 
     String input2; 
     int choice = 1000; 



     GenQueue<Customer> empList; 
     empList = new GenQueue<Customer>(); 
     GenQueue<HourlyCustomer> hList; 
     hList = new GenQueue<HourlyCustomer>(); 

     do{ 
      System.out.println("================"); 
      System.out.println("Queue Operations Menu"); 
      System.out.println("================"); 
      System.out.println("1,Enquene"); 
      System.out.println("2,Dequeue"); 
      System.out.println("0, Quit\n"); 
      System.out.println("Enter Choice:"); 
      try{ 

       choice = sc.nextInt(); 



       switch(choice){ 
       case 1: 

        do{ 


        System.out.println("\nPlease enter last name: "); 
        input1 = sc.next(); 
        System.out.println("\nPlease enter first name: "); 
        input2 = sc.next(); 
        hList.enqueue(new HourlyCustomer(input1, input2)); 
        empList.addItems(hList); 

        System.out.println("\n"+(input2 + " " + input1) + " is successful queued"); 

        System.out.println("\nDo you still want to enqueue?<1> or do you want to view all in queue?<0> or \nBack to main menu for dequeueing?<menu>: "); 
        choice = sc.nextInt(); 

        }while (choice != 0); 



        System.out.println("\nThe customers' names are: \n"); 

        while (empList.hasItems()) { 
        Customer emp = empList.dequeue(); 
        System.out.println(emp.firstName + " " + emp.lastName + "\n"); 
        int choose=100; 
        System.out.println("\nGo back to main?<1=Yes/0=No>: \n"); 
        choose = sc.nextInt(); 

        if(choose == 1){ 
         continue; 
        } 
        else 
        { 
         break; 
        } 


        } 
        break; 

       case 2: 


        if (empList.isEmpty()) { 
         System.out.println("The queue is empty!"); 
        } 
        else{ 
        System.out.println("\nDequeued customer: " +empList.getFirst()); 
        empList.removeFirst(); 

        System.out.println("\nNext customer in queue: " +empList.getFirst()+"\n"); 

        } 
        break; 





       default: 
         System.out.println("Invalid choice"); 
       } 

      } 
      catch(InputMismatchException e){ 
       System.out.println("Please enter 1-5, 0 to quit"); 
       sc.nextLine(); 
      } 
     }while(choice != 0); 
    } 
} 

當我說裏面情況1的if-else語句此問題發生,我希望它回去如果用戶輸入1則爲主。我該如何解決這個問題?有沒有替代這個if-else語句,以便它不會導致錯誤?第一天使用java,新手在這裏,我需要一些幫助。 VM的初始化過程中出現

誤差對象堆無法保留足夠的空間

回答

0

此問題是由JVM造成無法保留足夠的存儲空間,這意味着你的OS沒有按沒有足夠的內存來啓動JVM,這個內存通過設置JAVA_OPTSvmargs參數。

您可以嘗試減少由-Xmx-Xms指定的內存。

有關的更多信息:XmsXmx

What are the Xms and Xmx parameters when starting JVMs?

相關問題