2012-07-30 57 views
0

我的程序在第一個元素進入數組之後停止。你可以幫幫我嗎?代碼如下: 對不起 我已經做了一些修改ArrayQueue是我的類,我的所有方法都實現了 QueueElement是另一個保存元素類型的類.. 我認爲現在的問題是ArrayQueue類通過用戶輸入添加和排列陣列中的元素

   import java.io.*; 
      import java.util.Scanner; 
      public class QueueTest 
      { private static Scanner scan =new Scanner(System.in); 
       public static void main(String[] args) 
        { 
       ArrayQueue queue = new ArrayQueue(); 
       System.out.println("insert :" + 
      " P: to print the array "+ 
      "S: to sort "+ 
      "E: to empty"); 
      do 
      { 
     if (userInput.startsWith("Y")) { 
      System.out.println("insert the value of element"); 
      int vl = scan.nextInt(); 
      System.out.println("insert the description"); 
      String p = scan.next(); 
      System.out.println("insert true or false"); 
      boolean vlf = scan.nextBoolean(); 
      queue.shtoElement(new QueueElement(vl, p, vlf)); 
     } else if (userInput.startsWith("P")) { 
      queue.shfaqArray();//display the array 
     } else if (userInput.startsWith("S")) { 
      queue.rendit();//sort the array 
     } else if (userInput.startsWith("E")) { 
      queue.Empty();//empty array 
     } 
     System.out.println("Insert:" + " P: to display the array " 
       + " S: to sort array " 
       + " E: to empty"); 
     userInput = scan.next(); 
     } while (!userInput.equalsIgnoreCase("exit")); 
       } 
       } 

這裏是類ArrayQueue

    public class ArrayQueue implements Queue 

          { 
       //build the queue 
      QueueElement[] tabela= new QueueElement[MADHESIA]; 
      QueueElement element= new QueueElement(); 
      //test if queue is empty 
      public boolean isEmpty() 
       { 

       boolean empty = true; 
       for(int k =0;k<tabela.length;k++) 
         { 
          if(tabela[k] !=null) 
         empty =false; 
        break; 
           } 
          return empty; 
              } 

      public boolean isFull() 
       { 
        boolean full=false; 
        for(int k=0;k<tabela.length;k++) 
      { 
     if(tabela[k]!=null) 
      full=true; 
     break; 
      } 
    return full; 
     } 

    //sort the array 
     public void rendit() 
      { 
    QueueElement temp=tabela[0]; 
    for(int i=0;i<tabela.length;i++) 
    { 
     for(int j=i+1;j<tabela.length;j++) 
      if(tabela[j]!=null) 
      { 
      if(tabela[j].compareTo(tabela[i])==1) 
      { 
       tabela[j]=temp; 
       tabela[i]=tabela[j]; 
       temp=tabela[i]; 
      } 
      else 
       { 
       nrElementeve++; 
       } 
      } 
     if(tabela[i].getVlefshmeria()==false) 
     { 
      hiqElement(i,temp); 
      } 
      } 
       } 
    // add element into the array 

      public void shtoElement(QueueElement el) 
        {  
       if(isEmpty()) 
     { 
     tabela[0]=el; 
     } 
    else 
     { 
      for(int i=0;i<tabela.length;i++) 
       {  
        if(tabela[i]!= null && (el.compareTo(tabela[i])==0)) 
         { 
    System.out.println("element can't be added into array cause it exists !"); 
         }    
        { 
         if(isFull()) 
         {       
          int index=tabela.length; 
          tabela=rritMadhesine(tabela); 
          tabela[index]=el; 
        } 
       else 
       { 
      for(int j=0;j<tabela.length;j++) 
     { 
     if(tabela[j]==null) 
        tabela[j]=el; 
     break; 
     } 
         } 
       } 
     } 
       } 

      } 
     //find max of array 

     public QueueElement gjejMax() 
      { 
      QueueElement max = tabela[0]; 
      for (QueueElement element :tabela) 
       { 
    if(element.getValue() > max.getValue()) 
     { 
     max =element; 
     } 
    return max; 
      } 
      return max; 
       } 
      //find min of array 
      public QueueElement gjejMin() 
        { 
        QueueElement min= tabela[0]; 
        for(QueueElement element : tabela) 
        { 
        if(element.getValue()< min.getValue()) 
       { 
        min=element; 
          } 
         return min; 
           } 
           return min; 
           } 

      //remove element from array 

      public void hiqElement(int indeksi, QueueElement temp) 
        { 
         if(tabela.length > 0) 
         { 
        if(gjejMax().compareTo(temp)==0 || gjejMin().compareTo(temp)==0) 
       { 
        System.out.println("element can't be removed!"); 
        } 
        else 
      { 
        for(int i=indeksi;i<tabela.length;i++) 
         { 
         tabela[i]=tabela[i+1]; 
           } 
        } 
          nrElementeve--; 
           } 
          } 

     //empty array 

      public void Empty() 
       { 
      tabela= new QueueElement[MADHESIA]; 
          } 

         //display the array 

        public void shfaqArray() 
        { 
       for(int i=0;i< tabela.length;i++) 
       { 
       if(tabela[i]!=null) 
      { 
       System.out.println(tabela[i]); 
      } 
       else 
     break; 
        } 
       } 

     //increase the length of array 

     public static QueueElement [] rritMadhesine(QueueElement[] array){ 
      QueueElement[] tab=new QueueElement[array.length+2]; 
       return tab; 
        } 
        private int nrElementeve; 
       private static final int MADHESIA = 10; 
         } 
+5

More'?'s意味着更多的答案,正確..你有任何錯誤? – Thor84no 2012-07-30 14:28:19

+3

Atleast格式正確,也會出現大量錯誤,因爲您可能錯過格式不正確的代碼中的{}。 – Rndm 2012-07-30 14:28:25

+2

什麼是代碼中的長註釋部分?在發佈之前如果不需要,請將其刪除。 – Rndm 2012-07-30 14:31:47

回答

2

不知道是什麼ArrayQueueQueueElement是的,但是...

看起來您正在閱讀用戶輸入,然後通過決策樹決定根據該輸入做什麼。但在每一個點,你重新讀取用戶輸入:

 if(scan.next().startsWith("Y")) 
    { 
     System.out.println("Jepni vleren e elem"); 
     vl=scan.nextInt(); 
     System.out.println("Jepni pershkrimin e elem"); 
     p=scan.next(); 
     System.out.println("Jepni vlefshmerine e elem"); 
     vlf=scan.nextBoolean(); 
     queue.shtoElement(new QueueElement(vl,p,vlf)); 
    } 
    else 
    { 
     if(scan.next().startsWith("P")) 
      queue.shfaqArray(); 
    } 
    if(scan.next().startsWith("E")) 
     queue.Empty(); 
    if(scan.next().startsWith("S")) 
     queue.rendit(); 
    else 
    { 
     break; 
    } 

我想你想要更多的東西一樣:

 String userInput = scan.next(); 
    if(userInput.startsWith("Y")) 
    { 
     System.out.println("Jepni vleren e elem"); 
     vl=scan.nextInt(); 
     System.out.println("Jepni pershkrimin e elem"); 
     p=scan.next(); 
     System.out.println("Jepni vlefshmerine e elem"); 
     vlf=scan.nextBoolean(); 
     queue.shtoElement(new QueueElement(vl,p,vlf)); 
    } 
    else if(userInput.startsWith("P")) 
     queue.shfaqArray(); 
    else if(userInput.startsWith("E")) 
     queue.Empty(); 
    else if(userInput.startsWith("S")) 
     queue.rendit(); 
    else 
    { 
     break; 
    } 

如果你讀了用戶輸入一次(String userInput = scan.next();),然後決定什麼要根據變量userInput來做,而不是每次都重新掃描一次。另外,看起來你可能會在中間某個地方丟失幾條else語句。

+0

與我的代碼有關的問題是,只有第一個元素獲取數組,比編號什麼都不做,,,我希望編繼續運行,直到用戶輸入「q」,所以我想顯示「把elem的值,把elem的描述......如果它是真的或假的」,並且這些輸入得到數組 – 2012-07-30 15:12:42

+0

@AnnckyHome可能是因爲它要麼脫離了循環,要麼等待更多的輸入,因爲*你在每個if語句都調用了'scan.next()',你看過我的答案了嗎? – 2012-07-30 15:13:51

+0

是的..我讀..所以我不必每次都放.next()方法?好吧,我會嘗試thanx – 2012-07-30 15:20:33