2012-10-27 104 views
0

我有一個程序實現了打印隊列。我有一個StackClass可以找到stackjob和stackcycle,但是當我嘗試打印這些值時,我會得到奇怪的結果,如hashtags。我知道我需要覆蓋toString(),但是當我添加額外的代碼時,我無法讓我的代碼編譯。覆蓋StackClass中的toString

我不能在我的StackClass中添加代碼,因爲stackjob和stackcycle在那裏不存在。它們存在於我的主要方法文件PrintQueue文件中。但是,我不能在主方法中添加代碼,因爲我得到這個錯誤:PrintQ.java:10:';'預期的公共字符串toString(){^和我不能添加主方法以外的代碼,因爲我得到:無法找到堆棧作業和堆棧循環的符號錯誤。我錯過了什麼嗎?

我確實在我的週期類相同的jobnumber可以和cycleNumber和它完美的作品:

@Override 
public String toString() 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.append(jobNumber + " "); 
    sb.append(cycleNumber); 
    return sb.toString(); 
} 

下面,stackjob和stackcycle是我需要重寫的toString ..任何建議值是多少?

StackClass<Integer> stackjob = new StackClass(); 
StackClass<Integer> stackcycle = new StackClass(); 

這裏是我的StackClass

 public class StackClass<T> implements StackADT<T> 
     { 
     private int maxStackSize; //variable to store the 
          //maximum stack size 
     private int stackTop;  //variable to point to 
          //the top of the stack 
     private T[] list; //array of reference variables 
    //Create an array of the size 100 to implement the stack. 
    //Postcondition: The variable list contains the base 
    //    address of the array, stackTop = 0, 
    //    and maxStackSize = 100. 
    public StackClass() 
    { 
    maxStackSize = 100; 
    stackTop = 0;   //set stackTop to 0 
    list = (T[]) new Object[maxStackSize]; //create the array 
    }//end default constructor 

    //Constructor with a parameter 
    //Create an array of the size stackSize to implement the 
    //stack. 
    //Postcondition: The variable list contains the base 
    //    address of the array, stackTop = 0, 
    //    and maxStackSize = stackSize. 
    public StackClass(int stackSize) 
    { 
    if (stackSize <= 0) 
    { 
     System.err.println("The size of the array to " 
         + "implement the stack must be " 
         + "positive."); 
     System.err.println("Creating an array of the size 100."); 

     maxStackSize = 100; 
    } 
    else 
     maxStackSize = stackSize; //set the stack size to 
            //the value specified by 
            //the parameter stackSize 
    stackTop = 0; //set stackTop to 0 
    list = (T[]) new Object[maxStackSize]; //create the array 
    }//end constructor 

    //Method to initialize the stack to an empty state. 
    //Postcondition: stackTop = 0 
    public void initializeStack() 
    { 
    for (int i = 0; i < stackTop; i++) 
     list[i] = null; 

    stackTop = 0; 
    }//end initializeStack 

    //Method to determine whether the stack is empty. 
    //Postcondition: Returns true if the stack is empty; 
    //    otherwise, returns false. 
    public boolean isEmptyStack() 
    { 
    return (stackTop == 0); 
    }//end isEmptyStack 

    //Method to determine whether the stack is full. 
    //Postcondition: Returns true if the stack is full; 
    //    otherwise, returns false. 
    public boolean isFullStack() 
    { 
    return (stackTop == maxStackSize); 
    }//end isFullStack 

    //Method to add newItem to the stack. 
    //Precondition: The stack exists and is not full. 
    //Postcondition: The stack is changed and newItem 
    //    is added to the top of stack. 
    //    If the stack is full, the method 
    //    throws StackOverflowException 
    public void push(T newItem) throws StackOverflowException 
    { 
    if (isFullStack()) 
     throw new StackOverflowException(); 

    list[stackTop] = newItem; //add newItem at the 
           //top of the stack 
    stackTop++;    //increment stackTop 
    }//end push 

    //Method to return a reference to the top element of 
    //the stack. 
    //Precondition: The stack exists and is not empty. 
    //Postcondition: If the stack is empty, the method 
    //    throws StackUnderflowException; 
    //    otherwise, a reference to the top 
    //    element of the stack is returned. 
    public T peek() throws StackUnderflowException 
    { 
    if (isEmptyStack()) 
     throw new StackUnderflowException(); 

    return (T) list[stackTop - 1]; 
    }//end peek 

    //Method to remove the top element of the stack. 
    //Precondition: The stack exists and is not empty. 
    //Postcondition: The stack is changed and the top 
    //    element is removed from the stack. 
    //    If the stack is empty, the method 
    //    throws StackUnderflowException 
    public void pop() throws StackUnderflowException 
    { 
    if (isEmptyStack()) 
     throw new StackUnderflowException(); 

    stackTop--;  //decrement stackTop 
    list[stackTop] = null; 
    }//end pop 

}

這裏是我的PrintQ:

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

      public class PrintQ { 


    public static void main(String args[]) throws FileNotFoundException { 

    String job1; 

    int firstComma; 
    int secondComma; 

    QueueClass<Cycle> list= new QueueClass(100); 
    QueueClass<Integer> cyclelist= new QueueClass(100); 
    Cycle currentcycle= new Cycle(); 
    Cycle priorityCycle= new Cycle(); 
    Cycle Scycle= new Cycle(); 

    try{ 

     FileInputStream fstream = new FileInputStream("C:\\Users\\Whitney\\Desktop\\QueueIn.txt"); 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 
     job1=br.readLine(); 
     while ((strLine = br.readLine()) != null) { 
      switch(job1.charAt(0)) { 

       case 'q': 
       { 
        System.out.println("loop q"); 
        firstComma=job1.indexOf(','); 
        secondComma=job1.lastIndexOf(','); 
        currentcycle.jobNumber=Integer.parseInt(job1.substring(firstComma+1,secondComma)); 
        currentcycle.cycleNumber=Integer.parseInt(job1.substring(secondComma+1)); 
        cyclelist.addQueue(currentcycle.cycleNumber); 
        list.addQueue(currentcycle); 

        while(currentcycle.cycleNumber > 0) 
        { 

         System.out.println(currentcycle.jobNumber + " " + currentcycle.cycleNumber); 
         currentcycle.cycleNumber--; 
        } 
        //list.print(); 
        break; 
       } 

       case 'p': 
       { System.out.println("loop priority");     
        firstComma=job1.indexOf(','); 
        secondComma=job1.lastIndexOf(','); 
        priorityCycle.jobNumber=Integer.parseInt(job1.substring(firstComma+1,secondComma)); 
        priorityCycle.cycleNumber=Integer.parseInt(job1.substring(secondComma+1)); 
        cyclelist.addQueue(priorityCycle.cycleNumber); 
        list.priorityinsert(priorityCycle); 
        while(priorityCycle.cycleNumber > 0) 
        { 
         System.out.println(priorityCycle.jobNumber + " " + priorityCycle.cycleNumber); 
         priorityCycle.cycleNumber--; 

        } 
        System.out.println(cyclelist);      
        //list.print(); 

        break; 
       } 

       case 's': 
       {System.out.println("loop s"); 
        firstComma=job1.indexOf(','); 
        Scycle.cycleNumber=Integer.parseInt(job1.substring(firstComma+1)); 
        cyclelist.addQueue(Scycle.cycleNumber);      
        list.addQueue(Scycle); 
        while(Scycle.cycleNumber > 0) 
        { 
         System.out.println(Scycle.jobNumber + " " + Scycle.cycleNumber); 
         Scycle.cycleNumber--; 

        } 


        break; 
       } 

       case 'h': 
       { 
        System.out.println("loop halt"); 
        StackClass<Integer> stackjob= new StackClass(); 
        StackClass<Integer> stackcycle= new StackClass(); 



        job1=(String) br.readLine(); 
        //list.print(); 

        System.out.println(stackjob.toString() +" " + stackcycle.toString()); 


        while((strLine = br.readLine()) != null){ 

         switch(job1.charAt(0)) { 

          case 'q': 
          { 

           firstComma=job1.indexOf(','); 
           secondComma=job1.lastIndexOf(','); 
           currentcycle.jobNumber=Integer.parseInt(job1.substring(firstComma+1,secondComma)); 
           currentcycle.cycleNumber=Integer.parseInt(job1.substring(secondComma+1)); 
           stackjob.push(currentcycle.jobNumber); 
           stackcycle.push(currentcycle.cycleNumber); 
           System.out.println("hi"); 
           System.out.println(currentcycle.jobNumber + " " + currentcycle.cycleNumber); 
           //list.print(); 
           break; 
          } 
          case 'p': 
          { 

           firstComma=job1.indexOf(','); 
           secondComma=job1.lastIndexOf(','); 
           priorityCycle.jobNumber=Integer.parseInt(job1.substring(firstComma+1,secondComma)); 
           priorityCycle.cycleNumber=Integer.parseInt(job1.substring(secondComma+1)); 
           stackjob.push(priorityCycle.jobNumber); 
           stackcycle.push(priorityCycle.cycleNumber); 
           System.out.println(priorityCycle.jobNumber-- + " " + priorityCycle.cycleNumber--); 
           break; 
          } 

          case 's': 
          { 
           firstComma=job1.indexOf(','); 
           secondComma=job1.lastIndexOf(','); 
           Scycle.cycleNumber=Integer.parseInt(job1.substring(secondComma+1)); 
           stackjob.push(0); 
           stackcycle.push(Scycle.cycleNumber); 
           System.out.println(Scycle.jobNumber + " " + Scycle.cycleNumber); 
           break; 
          } 

          case 'h': 
          { 
           System.out.println("Halt - " + list); 
           continue; 
          } 

         } 
         job1=(String) br.readLine(); 

        } 
        //System.out.println(); 

        while((stackjob.isEmptyStack()==false) || (stackcycle.isEmptyStack()==false)) 
        { 
         int printjob; 
         int printcycle; 
         Object peek; 

         printjob=stackjob.peek(); 
         printcycle=stackcycle.peek(); 
         stackcycle.pop(); 
         stackjob.pop(); 
         System.out.println("Job Number: "+printjob+" "+"Cycles Remaining: "+printcycle); 
        } 


        continue; 
       }   
      } 
      job1=br.readLine(); 
     } 
     in.close(); 
    } 
     catch (Exception e){//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 


    Cycle whilecurrent= new Cycle(); 

    while(list.isEmptyQueue()==false) 
    { 
     whilecurrent=list.front(); 
     int whilecurrentcycle= cyclelist.front(); 
     //list.print(); 
     //System.out.println(); 

     //while(whilecurrentcycle != 0) 
     //{ 
      //System.out.println();//"loop "+whilecurrentcycle--); 
     //} 
     //System.out.println(); 

     //System.out.println(whilecurrent); 

     cyclelist.deleteQueue(); 
     list.deleteQueue(); 
    } 

    list.print(); 

    } 

}

+3

什麼是編譯錯誤? –

+0

@YogendraSingh:看起來我們應該能夠閱讀原始海報的頭腦並猜測錯誤。我放棄。 –

+0

嗯,我不能在我的StackClass中添加代碼,因爲stackjob和stackcycle不存在。它們存在於我的主要方法文件PrintQueue文件中。但是,我不能在主方法中添加代碼,因爲我得到這個錯誤:PrintQ.java:10:';'預計 公共字符串toString(){ ^ 和我不能添加主方法之外的代碼,因爲我得到:無法找到堆棧作業和堆棧循環的符號錯誤。我錯過了什麼嗎? – wolne

回答

0

循環通過堆疊陣列,建立一字符串:

public String toString() { 
    StringBuilder output = new StringBuilder("["); 
    if (stackTop > 0) { 
    for (int i = stackTop - 1; i >= 0; i--) { 
     if (i == 0) { 
      output.append(list[i].toString()); 
     } 
     else { 
      output.append(list[i].toString() + "|"); 
     } 
    } 
    } 
    output.append("]"); 
    return output.toString(); 
} 
0

如果你想有一個快捷的解決方案,你可以隨時返回列表的Arrays.toString(...):

public String toString() { 
    return java.util.Arrays.toString(list); 
} 

否則只需通過您的toString列表遍歷數組方法,並將列表項返回的toString()添加到您的StringBuilder中。