写一个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
答案 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;
}
通过这种方式,您可以在打印完最后一个元素后结束循环。