Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反向链表问题_Java_Loops_Linked List_Java.util.scanner_Ctrl - Fatal编程技术网

Java 反向链表问题

Java 反向链表问题,java,loops,linked-list,java.util.scanner,ctrl,Java,Loops,Linked List,Java.util.scanner,Ctrl,我正在为学校做一个项目,我的工作是制作一个LinkedList程序,用户可以读入一行整数,并使用链表函数反向打印它们。 我有一些工作,但是,每次我必须结束从System.in读取按Ctrl+C。每。。。时间 我正在试图找到一种方法,在扫描程序读取int-1时停止读取。 空白也可以。但一旦它读到-1,我希望它停止 但是我找不到正确的方法 以下是我到目前为止的情况: //ReverseUsingLinkedList.java import java.util.*; public class Reve

我正在为学校做一个项目,我的工作是制作一个LinkedList程序,用户可以读入一行整数,并使用链表函数反向打印它们。 我有一些工作,但是,每次我必须结束从System.in读取按Ctrl+C。每。。。时间

我正在试图找到一种方法,在扫描程序读取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());

    }
}
//ReverseUsingLinkedList.java
导入java.util.*;
公共类反转LinkedList
{
公共静态void main(字符串[]args)
{
System.out.print(“输入整数序列,-1到结尾:”);
LinkedList num=新建LinkedList();
扫描仪键盘=新扫描仪(System.in);
while(keyboard.hasNext())
{
num.addFirst(keyboard.nextInt());
}
键盘关闭();
num.removeFirst();//从LinkedList中删除-1
System.out.println(“反向列表:+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形式获取用户输入。将其括在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;
}
int len=0;
while(keyboard.hasNext())
{
len++;
}
键盘关闭();
对于(int i=0;i
一旦从
for
循环中断,就可以选择是否要删除
-1
元素。
O{n}
将是相同的,只是现在它不会跳转到每一个int值而不是每一个int值


此外,我建议您在
java.util.Scanner
上尝试
java.io.BufferedReader
。只有当每个int都在单独的行中时,它才起作用,但是速度要快10倍以上。

尽管@trombry的答案有助于检查正确的条件。 我建议更新实现,阅读下面的输入,避免在列表中交替输入--


采用上述方法,输入-输出可能如下-



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

我必须通过按Ctrl+C结束从System.in读取-否则您如何期望扫描仪知道System.in没有更多输入?-如果不是int,可能是
中断
?但是在这种情况下,空格也可以,我正在尝试找到一种方法,在扫描程序读取-1时停止扫描。但是它找不到正确的方法,我不知道为什么我没有想到把它初始化成这样的int。非常感谢。这帮了大忙@恐怖袋熊-这也确保了-1现在不会被添加到列表中,也不应该像问题中那样被删除。加上列表中的备用输入。
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]