2017-02-28 112 views
-1

我正在爲學校做一個項目,我的工作是製作一個LinkedList程序,用戶可以讀入一行整數並使用鏈接列表功能以反向方式打印它們。 但我有點工作,但是,每次我必須通過按Ctrl + C結束從System.in中的讀入操作。每...時間...反向鏈接列表問題

我試圖找到一種方法來停止掃描器讀取時,它讀取int -1。 空白也可以。但一旦它讀-1,我想它停止 但我找不到正確的方法。

這是我到目前爲止有:

//ReverseUsingLinkedList.java 
import java.util.*; 
public class ReverseUsingLinkedList 
{ 
    public static void main(String[]args) 
    { 
     System.out.print("Enter a sequence of Integers, -1 to end: "); 

     LinkedList<Integer> num= new LinkedList<Integer>(); 
     Scanner keyboard = new Scanner(System.in); 

     while(keyboard.hasNext()) 
     { 
      num.addFirst(keyboard.nextInt()); 
     } 
     keyboard.close(); 
     num.removeFirst();  //Removes the -1 from the LinkedList 

     System.out.println("List in reverse :" + num.toString()); 

    } 
} 

我試圖改變的讀入hasNext.Int()來代替,但導致讀取跳過去,我是想讀每隔INT。我也嘗試過使用某種類型的迭代器,但是我找不到正確的方式來使用它。

有什麼建議嗎?

+0

*我必須通過按Ctrl + C結束從System.in中讀入內容 - 您還希望掃描器知道沒有更多來自System.in的輸入? - 如果不是int,也許'break'? –

+0

但是在這種情況下,空白也是好的,我試圖找到一種方法,當它讀取-1時會停止掃描器。但是它無法找到正確的方法來做到這一點。 –

回答

0

來測試是否輸入-1並打破如果這樣

while(keyboard.hasNext()) 
    int num = keyboard.nextInt(); 
    if (num == -1) // or less than 0 ? 
    break;  
    num.addFirst(num); 
} 

編輯

請注意@nullpointer非常有效的註釋

+0

我不知道爲什麼我沒有想到只是初始化它像一個int。謝謝。這非常有幫助! –

+0

@Scary袋熊 - 這也確保-1現在不會被添加到列表中,不應該像問題中一樣被刪除。加上列表的備用輸入。 – nullpointer

0

獲取用戶輸入的INT。把它放在try catch塊中。在例外情況下你可以休息。

try{ 
    int x =keyboard.nextInt(); 
    if(x==-1) 
     break; 
catch(Exception e){ 
    break; 
} 
num.addFirst(i); 
1

要使用任何類型的讀者,您將需要通過讀取器迭代先記錄對象的數量,然後重複第二次使用的實際值。請嘗試以下操作:

int len = 0; 

while(keyboard.hasNext()) 
{ 
    len++; 
} 
keyboard.close(); 

for (int i = 0; i < len; i++) 
{ 
    int temp = keyboard.nextInt(); 
    if (temp == -1) 
     break; 
} 

一旦你從for迴路斷線,你可以選擇是否要刪除-1元素。 O{n}將是相同的,除了現在不會跳到每個int值而不是其他所有值。

另外,我建議你試試java.io.BufferedReader超過java.util.Scanner。它只有在每個int都在一個單獨的行中,但速度超過10倍時纔有效。

0

儘管@Scary的答案有助於檢查正確的條件。 我建議更新執行讀取下一個輸入像如下,避免交替列表中輸入 -

int input = keyboard.nextInt(); // the first input 
while (input !=-1) { // you do not jump with a hasNext() call now 
    num.addFirst(input); 
    input = keyboard.nextInt(); // successive input 
} 
// get rid of removeFirst() call 

通過上述方法的輸入輸出像 -

Enter a sequence of Integers, -1 to end: 3 
4 
5 
6 
-1 
List in reverse :[6, 5, 4, 3] 

根據您當前的更新和可怕的建議你MIG ht仍然提供n輸入2,4,6,7,-1只是爲了找到似乎不需要的輸出7,4