2015-11-01 36 views
1

我必須編寫一個用戶界面,它從命令屏幕接收數據並使用它訪問鏈接列表類中的方法。它們都在同一個文件中,並且節點類已經寫好了,它編譯得很好。如果有人能幫我弄清楚爲什麼它只讀取三條命令,比如我的狗,我的貓,p,然後說java.io.IOException:流關閉。我還檢查了是否增加了空格,即指揮我的狗貓,我的鳥,p影響了它讀取的行數,但它沒有。例外情況也是如此。任何提示將非常感謝。我的輸入只能讀取三個命令,而不會讀取它所讀取的內容?

public static void main(String[] args){ 
    linkedlist link= new linkedlist(); 
    int n=0; 
    System.out.println("Type a command\n"); 
     try{ 
     BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); 
      s=in.readLine(); 
      while(in.readLine()!=null){ 
       s=in.readLine(); 
       char first=s.charAt(0); 
       int space= s.indexOf(" "); 
       while(space<=n){ 
        if(first=='i'){ 
         String w=s.substring(space); 
         link.insert(w); 
        } 
        if(first=='d'){ 
         String w=s.substring(space); 
         link.delete(w); 
         link.printlist(); 
        } 
        if(first=='f'){ 
         String w=s.substring(space); 
         link.find(w); 
         link.printlist(); 
        } 
        if(first== 'p'){ 
         link.printlist(); 
        } 
        n++; 
       } 
       in.close(); 
      } 
      }catch(Exception e) {System.out.println("Ack!: " + e);} 
} 

回答

1

流關閉錯誤意味着您正試圖在關閉後寫入。格式化你這樣的代碼:

Open in stream on this line before try 
try { 
    Do processing here 
    ..... 
} 
catch(Exception e) 
{ 
    .... 
} 
finally 
{ 
    close stream here 
} 

finally塊將運行需要運行的try/catch後運行代碼,這樣就把流接近那裏。

+1

謝謝解決了這個問題,但現在它不輸出任何東西。我應該輸出在finally塊中。我不這麼認爲,但我很困惑。 – Haukka

+1

什麼部分不輸出 - catch中的Ack還是「輸入命令」或其他? –

+1

任何方法 – Haukka

0

請嘗試將while(in.readLine()!=null)循環後移出in.close();。目前,BufferedReader in在while循環內部被關閉,因此當while循環嘗試檢查in.readLine()!=null條件時,它實際上會嘗試訪問已關閉的in

+1

感謝您的幫助。但現在它不會輸出任何東西。即使在我的鏈表類中,printlst包含System.out.println – Haukka