我正在为学校做一个项目,我的工作是创建一个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。我也试过使用某种迭代器,但我找不到合适的方法来使用它。
有什么建议吗?
答案 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 强者>似乎并不需要。