2017-04-11 45 views
0

當我學習隊列時,發現了一些問題,這裏是我的代碼和結果。希望有人能幫我解決問題,謝謝! import java.util.Scanner;排隊的數據輸出

public class Test{ 
    public static void main(String[] args){ 
     SQType sq = new SQType(); 
     Data data1; 
     Scanner in = new Scanner(System.in); 
     SQType s = sq.SQInit();       //初始化隊列 

     System.out.println("入隊列操作:"); 
     System.out.println("輸入姓名 年齡進行操作:"); 
     do{ 
      Data data = new Data(); 
      data.name = in.next(); 
      data.age = in.nextInt(); 
      if(data.name.equals("0")){ 
       break; 
      } 
      else{ 
       sq.InSQType(s,data); 
      } 
     }while(true); 

     String temp; 
     System.out.println("出隊列操作,按任意非0鍵繼續:"); 
     temp = in.next(); 
     while(!temp.equals("0")){ 
      data1 = sq.OutSQType(s); 
      System.out.printf("出隊列的數據爲(%s %d)",data1.name, data1.age); 
      temp = in.next(); 
     } 

     System.out.println("測試結束!"); 
     sq.SQTypeFree(s); 
    } 
} 

class Data{ 
    String name; 
    int age; 
} 

class SQType{ 
    private static final int QUEUELEN = 15; 
    private Data[] data = new Data[QUEUELEN]; 
    private int head; 
    private int tail; 

    SQType SQInit(){ 
     SQType s; 
     if((s = new SQType()) != null){     //申請內存 
      s.head = 0;         //設置隊頭 
      s.tail = 0;         //設置隊尾 
      return s; 
     } 
     else{ 
      return null; 
     } 
    } 

    int SQTypeIsEmpty(SQType s){      //判斷是否爲空隊列 
     int temp = 0; 
     if(s.head == s.tail){ 
      temp = 1; 
     } 
     return temp; 
    } 

    int SQTypeIsFull(SQType s){       //判斷是否爲滿隊列 
     int temp = 0; 
     if(s.tail == QUEUELEN){ 
      temp = 1; 
     } 
     return temp; 
    } 

    void SQTypeClear(SQType s){       //清空隊列 
     s.head = 0; 
     s.tail = 0; 
    } 

    void SQTypeFree(SQType s){ 
     if(s != null){ 
      s = null; 
     } 
    } 

    int InSQType(SQType s, Data data){     //數據入隊列 
     if(s.tail == QUEUELEN){ 
      System.out.println("隊列已滿!操作失敗!"); 
      return 0; 
     } 
     else{ 
      s.data[s.tail++] = data; 
      return 1; 
     } 
    } 

    Data OutSQType(SQType s){       //數據出隊列 
     if(s.head == 0){ 
      System.out.println("隊列爲空!操作失敗!"); 
      return null; 
     } 
     else { 
      return s.data[s.head++]; 
     } 
    } 

    Data PeekSQType(SQType s){       //讀取隊列數據 
     if(SQTypeIsEmpty(s) == 1){ 
      System.out.println("空隊列!"); 
      return null; 
     } 
     else{ 
      return s.data[s.head]; 
     } 
    } 

    int SQTypeLen(SQType s){       //計算隊列長度 
     int temp; 
     temp = s.tail - s.head; 
     return temp; 
    } 
} 

下面是結果,隊列可以在數據讀取,但不能輸出數據 enter image description here

+3

可能的重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what- is-a-nullpointerexception-and-how-do-i-fix-it) –

+1

你可以把你的代碼作爲文本而不是這些圖片嗎? –

回答

0

在OutSQType,在if語句代碼應改爲「S .head == s.tail「,或者它會一直返回null