2017-03-27 35 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?

相关问题