我正在使用Scanner.hasNextInt()从我的控制台获取空格分隔的整数:
输入: 1 2 3 4 5
但程序只是在读取值5后挂起。我已经尝试调试这个但是蓝色调试器在读取5之后也消失了,并且从未前进到下一行。任何帮助表示赞赏。以下是我的代码:
package cracking.code;
import java.util.Scanner;
public class Node<T extends Comparable<T>>{
Node<T> left;
Node<T> right;
T data;
public Node(T data){
this.data = data;
this.left = null;
this.right = null;
}
public void insert(T value){
if(value.compareTo(data)<=0){
if(left == null){
left = new Node<T>(value);
}
else{
left.insert(value);
}
}
else{
if(right == null){
right = new Node<T>(value);
}
else{
right.insert(value);
}
}
}
public boolean contains(T value){
if(value.compareTo(data) == 0){
return true;
}
else if(value.compareTo(data)<0){
return (left == null)?false:left.contains(value);
}
else{
return (right == null)?false:right.contains(value);
}
}
public void printInOrder(){
if(left != null){
left.printInOrder();
}
System.out.println(data+" ");
if(right != null){
right.printInOrder();
}
}
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
Node<Integer> root = new Node<Integer>(scanner.nextInt());
while(scanner.hasNextInt()){
int value = scanner.nextInt();
root.insert(value);
}
root.printInOrder();
scanner.close();
}
}
我刚修改了我的程序,使用for循环获取整数。我给n的值为5并输入整数:1 2 3 4 5 ..当i = 4时,程序只在for循环中冻结:
public static void main(String args[]){
System.out.println("Enter the number of values:");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println("Enter the values using space separation: ");
Node<Integer> root = new Node<Integer>(scanner.nextInt());
for(int i = 0; i < n; i++){
int value = scanner.nextInt();
root.insert(value);
}
System.out.println("Out of the damn for loop");
答案 0 :(得分:0)
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int value = scanner.nextInt();
System.out.println(value);
}
scanner.close();
}
答案 1 :(得分:0)
当您使用System.in
作为基础PrintStream
时,这是预期的行为。
System.in
基本上是用户可以输入的控制台。当您询问System.in
是否有下一个整数时,它会询问用户是否要输入更多内容。所以它等在那里并要求你输入。
按Ctrl + D或Command + D可以说“不,我不想再输入任何内容”。
或者,您可以告诉用户输入特定数字意味着他/她不想再输入任何内容。然后,您可以检查此内容并break
退出循环。
提示:在close
上使用Scanner
作为基础流调用System.in
并不是一个好主意。当您尝试在关闭后阅读更多内容时,您的程序将崩溃。