2017-02-28 127 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