使用next()时扫描程序中的NoSuchElementException

时间:2014-11-18 21:25:08

标签: java java.util.scanner

我基本上是在尝试填充String [] []。 每当我使用扫描仪的next()函数时,它都会抛出异常。

请帮忙吗?

public static void main(String[] args) throws NumberFormatException, Exception {

    int k,i;
    int n = Integer.parseInt(IO.promptAndRead("Bitte geben Sie eine Zahl zwischen 5 und 50 ein: ")); // any number between 5 and 50
    String name= IO.promptAndRead("Bitte geben Sie Ihren Vor- und Zunamen ein: "); //for example "Hans Zimmermann"
    n=n-1;
    String[][] matrix = new String[n][n];

    Scanner sc = new Scanner(name);

    boolean b_switch = false;

    for (i = 0; i<n;i++) {
        b_switch = !b_switch;
        if (b_switch == true) {
            for (k = 0; k<n;k++) {
                matrix[i][k] = sc.next();
            }
            if (i+1 < n){
                matrix[i+1][k] = sc.next();
            }
        }
        else {
            for (k = n; k>0;k--) {
                matrix[i][k] = sc.next();
            }

            if (i+1 < n){
                matrix[i+1][k] = sc.next();
            }
        }
    }

我的控制台输出:

Bitte geben Sie eine Zahl zwischen 5 und 50 ein: 15
Bitte geben Sie Ihren Vor- und Zunamen ein: asdf
    Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Unknown Source)
        at java.util.Scanner.next(Unknown Source)
        at ep1_uebung6.Maender.main(Maender.java:25)

2 个答案:

答案 0 :(得分:1)

您收到NoSuchElementException,因为您在代码中使用sc.next()而未验证是否有任何元素。

您应该在致电sc.next()之前检查是否存在,如下所示。

if (sc.hasNext()) {
    matrix[i][k] = sc.next();
}

For more information, refer the JavaDoc.

答案 1 :(得分:0)

像这样修改,它应该适合你

for (i = 0; i<n;i++) {
  if(sc.hasNext()) {
    b_switch = !b_switch;
    if (b_switch == true) {
        for (k = 0; k<n;k++) {
            matrix[i][k] = sc.next();
        }
        if (i+1 < n){
            matrix[i+1][k] = sc.next();
        }
    }
    else {
        for (k = n; k>0;k--) {
            matrix[i][k] = sc.next();
        }

        if (i+1 < n){
            matrix[i+1][k] = sc.next();
        }
    }
 } else {
    break;
 }
}

希望这有帮助!