反向链接列表问题

时间:2017-02-28 02:07:57

标签: java loops linked-list java.util.scanner ctrl

我正在为学校做一个项目,我的工作是创建一个LinkedList程序,用户可以将其读入一行内容并使用Linked List函数反向打印它们。 我有点工作,但是,每次我必须通过按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。我也试过使用某种迭代器,但我找不到合适的方法来使用它。

有什么建议吗?

4 个答案:

答案 0 :(得分: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倍以上。

答案 1 :(得分:0)

测试输入是否为foreach($array as $key => $value) { if ($value['parent_id'] === null) { echo $key; // we got a parent, iterate through it's children foreach($value['children'] as $childId) { echo $array[$childId]['name']; } } } 并且如果是,则进行中断

-1

修改

请注意@nullpointer非常有效的评论

答案 2 :(得分:0)

以int形式获取用户输入。将它包含在try catch块中。在例外情况下你可以打破。

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

答案 3 :(得分: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]

根据您当前的更新和Scary的建议,您仍然可以提供n输入 2,4,6,7,-1 ,只是为了找到输出 7,4 似乎并不需要。