反向链接列表问题
我正在为学校做一个项目,我的工作是制作一个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。我也尝试过使用某种类型的迭代器,但是我找不到正确的方式来使用它。
有什么建议吗?
来测试是否输入-1
并打破如果这样
while(keyboard.hasNext())
int num = keyboard.nextInt();
if (num == -1) // or less than 0 ?
break;
num.addFirst(num);
}
编辑
请注意@nullpointer非常有效的注释
我不知道为什么我没有想到只是初始化它像一个int。谢谢。这非常有帮助! –
@Scary袋熊 - 这也确保-1现在不会被添加到列表中,不应该像问题中一样被删除。加上列表的备用输入。 – nullpointer
获取用户输入的INT。把它放在try catch块中。在例外情况下你可以休息。
try{
int x =keyboard.nextInt();
if(x==-1)
break;
catch(Exception e){
break;
}
num.addFirst(i);
要使用任何类型的读者,您将需要通过读取器迭代先记录对象的数量,然后重复第二次使用的实际值。请尝试以下操作:
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倍时才有效。
尽管@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。
*我必须通过按Ctrl + C结束从System.in中读入内容 - 您还希望扫描器知道没有更多来自System.in的输入? - 如果不是int,也许'break'? –
但是在这种情况下,空白也是好的,我试图找到一种方法,当它读取-1时会停止扫描器。但是它无法找到正确的方法来做到这一点。 –