Java:从键盘缺失数据输入列表

时间:2017-01-25 22:12:32

标签: java

写一个Java程序来创建一个列表,从键盘输入值然后打印这个列表的值,但当我输入1 3 5 7 9时,输出只有1,3,5,其中是7 9,你可以帮助我吗

public class MergeTwoSortedList {
    public static class ListNode{
        int value;
        ListNode next;
        public ListNode(int n){
            this.value = n;
            this.next = null;
        }
    }
    public static void main(String[] args){
        // input two integer lists
        System.out.println("please input list1");
        Scanner in = new Scanner(System.in);
        ListNode head = null;
        if(in.hasNextInt()){
            head = new ListNode(in.nextInt());
        }
        ListNode temp = head;
        while(in.hasNextInt()){
            temp.next = new ListNode(in.nextInt());
            temp = temp.next;
        }

        in.close();
        ListNode list1 = head;

        while(list1.next != null){

            System.out.print(list1.value + ",");
            list1 = list1.next;
        }

        System.out.println();



    }


}

运行时,打印:

please input list1
1 3 5 7 9;
1,3,5,

其中是7和9

1 个答案:

答案 0 :(得分:1)

在您的示例输入1 3 5 7 9;中,9;被视为String,因此您不会将其添加到您的列表中,因为您正在调用in.hasNextInt() 。 要解决此问题,您可以在输入完数字后编写一个空格,因此在您的示例中,正确的输入将如下所示:

1 3 5 7 9 ;

你的代码的另一个问题是你的条件 while(list1.next != null)循环。 如果逐步分析代码,您将看到当list1成为最后一个节点时,检查它是否具有下一个节点并结束循环而不打印最后一个值。 解决方案非常简单,只需将您的while条件更改为:

while(list1 != null){
    System.out.print(list1.value + ",");
    list1 = list1.next;
}

通过这种方式,您可以在打印完最后一个元素后结束循环。