程序在scanner.hasNextInt()后挂起

时间:2017-08-26 08:40:46

标签: java integer java.util.scanner

我正在使用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");

2 个答案:

答案 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并不是一个好主意。当您尝试在关闭后阅读更多内容时,您的程序将崩溃。