卡在控制台中检测下一行

时间:2018-07-29 05:11:30

标签: java

我把头撞在墙上,但根本不知道出了什么问题。简单的程序,但不起作用。我需要从用户那里获得3个输入(整数)。在阵列已满或用户按Enter时结束程序。这是我没有运气的尝试。除了无法检测到下一行之外,它在所有情况下都可以正常工作。

Scanner sc = new Scanner(System.in);

    int[] intArray = new int[3];
    int counter = 0;

    System.out.println("Start!!");
    while (true) {
        System.out.println("Enter int");
        if (sc.hasNextInt() && counter <= 2) {
            intArray[counter] = sc.nextInt();
            counter++;

        } else {
            if (counter >= 3) {
                System.out.println("Array is full");
                System.out.println("Array ELemnets : " + Arrays.toString(intArray));
                break;
            }
            if (sc.next().isEmpty() || sc.next().equals("\n")){
                System.out.println("Its empty");
                break;
            } else {
                System.out.println("wrong input.");
            }
        }

    }
    sc.close();

请帮助我。为什么不检测下一行。我已经用谷歌搜索了很多解决方案,但没有一个对我有用。任何帮助! 谢谢 修改后的代码:     扫描仪sc =新的Scanner(System.in);

    int[] intArray = new int[3];
    int counter = 0;

    System.out.println("Start!!");
    while (true) {
        System.out.println("Enter int");
        if (sc.hasNextInt() && counter <= 2) {
            intArray[counter] = sc.nextInt();
            counter++;

        } else {
            if (counter >= 3) {
                System.out.println("Array is full");
                System.out.println("Array ELemnets : " + Arrays.toString(intArray));
                break;
            }
            String next = sc.next();
            if (next.isEmpty() || next.equals("\n"))

            {
                System.out.println("Its empty");
                break;
            } else {
                System.out.println("wrong input.");
            }
        }

    }
    sc.close();

}

2 个答案:

答案 0 :(得分:1)

    int[] intArray = new int[3];
    int counter = 0;
    boolean enterPressed = false; // added boolean to test if they entered a blank line

    try (
            Scanner sc = new Scanner(System.in); // declaring in a try-with-resources, so it automatically closes.
        ) {

        System.out.println("Start!!");
        System.out.println("Enter int"); // Have to print this the first time
        while (counter < 3 && !enterPressed) {
            if (counter > 0) { System.out.println("Enter int"); }
            String next = sc.nextLine(); // just grab a line (the user pressed enter)
            if (next.isEmpty()) {
                enterPressed = true;
            } else {
                try {
                    intArray[counter] = Integer.parseInt(next);
                    counter++;
                } catch (NumberFormatException ex) {
                    System.out.println("wrong input.");
                }
            }
        } 
    }

答案 1 :(得分:1)

您的代码一直在坚持,因为它正在等待sc.hasNextInt()的条件检查。我在下面提出的解决方案是手动分析用户输入的字符串以查看其是否为int,而不是使用扫描仪的功能来检查其是否为int。

我在代码中留下了一些注释,希望可以增加清晰度。让我知道是否没有任何意义,我很乐于阐述!

import java.util.Arrays;
import java.util.Scanner;

public class ScannerTestNew {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int[] intArray = new int[3];
        int counter = 0;

        System.out.println("Start!!");

        // Variable used to hold the user's input via the Scanner.
        String userInput = null;
        while (true) {
            System.out.print("Enter an integer: ");
            userInput = sc.nextLine();

            // Check to see if an empty string/enter/return has been input:
            if (userInput.length() == 0) {
                System.out.println("Input is empty!");
                break;
            }

            // Checking to see if the input can be parsed into an int. If it can't, retry.
            int intInput = 0;
            try {
                intInput = Integer.parseInt(userInput);
            } catch (NumberFormatException e) {
                System.out.println("Invalid input for type Integer. Please try again.");
                continue;
            }

            // We know we have an int at this point. Checking that the array isn't already
            // filled.
            if (counter <= 2) {
                intArray[counter] = intInput;
                counter++;

                // The array is filled, act accordingly.
            } else if (counter > 2) {
                System.out.println("Array is full.");
                System.out.printf("Array Elements: %s", Arrays.toString(intArray));
                break;
            }
            sc.close();
        }
    }
}