在ideone上的线程“main”java.util.NoSuchElementException中的异常

时间:2016-02-19 09:30:24

标签: java

这是我在java上的第一个代码。当我在Ideone上测试它时。它显示:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at Hw2_p4.main(Main.java:22)

我搜索了答案,但我没有得到问题原因或如何解决它。 代码通常在eclipse上运行

这是代码

import java.util.Scanner;

class Hw2_p4 {

    static void swap(String[] A, int a, int b) {
        String temp = A[a];
        A[a] = A[b];
        A[b] = temp;
    }

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(), m = sc.nextInt();
        int i, j, k, l, counter = 0;

        String[] name = new String[16];
        String[][] notalong = new String[120][2];
        String[] temp = new String[120];
        boolean[][] A = new boolean[120][2];

        for (i = 0; i < n; i++) {
            name[i] = sc.next();
        }

        for (i = 0; i < m; i++) {
            for (j = 0; j < 2; j++) {
                notalong[i][j] = sc.next();
            }
        }

        int flag = 0;

        for (i = 0; i < m; i++) {
            for (j = 0; j < 2; j++) {
                flag = 0;
                for (k = i + 1; k < m; k++) {
                    for (l = 0; l < 2; l++) {
                        if (notalong[i][j].compareToIgnoreCase(notalong[k][l]) == 0 && A[i][j] == false && A[k][l] == false) {
                            A[k][l] = true;
                            flag = 1;
                        }
                    }
                }

                if (flag == 1) {
                    A[i][j] = true;
                    counter++;
                } else if (flag == 0 && A[i][0] == false && A[i][1] == false) {
                    A[i][j] = true;
                    counter++;
                }
            }

        }

        System.out.println(n - counter);
        int x = 0;

        for (i = 0; i < m; i++) {
            for (j = 0; j < 2; j++) {
                if (A[i][j] == false) {
                    temp[x++] = notalong[i][j];
                    A[i][j] = true;

                    for (k = i + 1; k < m; k++) {
                        for (l = 0; l < 2; l++) {
                            if (notalong[i][j].compareToIgnoreCase(notalong[k][l]) == 0 && A[k][l] == false) {
                                A[k][l] = true;
                            }
                        }
                    }
                }
            }
        }

        //compare not along with names
        int found = 1;

        for (i = 0; i < n; i++) {
            found = 0;
            for (j = 0; j < m; j++) {
                for (k = 0; k < 2; k++) {
                    if (name[i].compareToIgnoreCase(notalong[j][k]) == 0) {
                        found = 1;
                    }
                }
            }

            if (found == 0) {
                temp[x++] = name[i];
            }
        }

        //sorting lexicographically
        boolean swapp = true;
        for (i = 0; i < x && swapp; i++) {
            swapp = false;
            for (j = 0; j < x - i - 1; j++) {
                if (temp[j].compareToIgnoreCase(temp[j + 1]) > 0) {
                    swap(temp, j, j + 1);
                    swapp = true;
                }
            }
        }

        for (i = 0; i < x; i++) {
            System.out.println(temp[i]);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

Ideone不是互动的。在运行应用程序之前,您必须单击Specify input并在其中输入所有输入。您所看到的是一个例外,因为System.in具有“文件结束”状态。

答案 1 :(得分:0)

您应该使用sc.next()保护cs.hasNext()

while (!sc.hasNext()) {
    Thread.sleep(100);
}
int n = sc.nextInt();

但是,由于您在整个代码中的许多位置读取了输入,请尝试使用Scanner.nextLine(),最好打印到控制台,接下来会有什么输入。 nextLine()将读取所有输入,直到用户按下ENTER,这是一个更好的“用户旅程”,而不仅仅是不断阅读键盘并将其传递给System.in

System.out.print("Please enter your favourite number : "); //NB print and space is last
String input = sc.nextLine();
int favNumber = Double.parseDouble(input);

答案 2 :(得分:0)

Ideone 为您的代码提供输入的方式与您的 IDE(或您)提供输入的方式不同。 所以你可能应该弄清楚 Ideone 如何提供输入,然后将你的代码修复为这种输入方式。