0

私のコードはこれです:

    Scanner teclado = new Scanner(System.in);
    System.out.println("Rellena con un caracter cada elemento de la primera matriz m1(" + filas1 + "," + cols1 + "), escribe sólo la letra.");
    for (int fila = 0; fila < m1.length; fila++) {
        for (int col = 0; col < m1[fila].length; col++) {
            caracter = teclado.nextLine();
            m1[fila][col] = caracter.charAt(0);
        }
    }

ここで例外が発生しますm1[fila][col] = caracter.charAt(0);

Java.StringIndexOutOfBoundsException

その前の行は、スキャナーに文字列を要求するプロンプトを表示せず、例外をスローするだけなので、不思議です。そのため、例外を与える行にコメントすると、スキャナーに文字列を要求するプロンプトが表示されます。

なぜそれが起こっているのか、私は少し混乱しています。

4

3 に答える 3

2

の結果nextLine()が空の文字列であるように見える""ため、インデックス 0 に文字がないため、 がcharAt(0)スローされStringIndexOutOfBoundsExceptionます。

caracterスキャナーの場合、ユーザーデータの後に改行文字を消費しないnextLine()ような操作の後に使用していると思われます。nextInt

Scanner scanner = new Scanner(System.in);
System.out.println("Write some number");
int i = scanner.nextInt();
System.out.println("Write anything");
String data = scanner.nextLine();   // this will not wait for users data
                                    // because it will read data
                                    // before new line mark that user
                                    // passed by pressing enter
System.out.println(i + ">" + data);

この問題を解決するnextLine()には、nextInt(). その後、nextLine()再度使用して、ユーザーから次のデータを取得できます。

同様の質問については、こちらこちらをご覧ください。

于 2013-10-22T17:25:54.853 に答える
1

Pshemo さんが指摘したように、caracter は "" と等しいようです。これは、コンソールで Enter キーを押したときに発生し、空の行がスキャナに送信されます。あなたが何を達成しようとしているのかはわかりませんが、このような小さなチェックでエラーが停止するはずです。

if (!caracter.isEmpty())
    m1[fila][col] = caracter.charAt(0);

ユーザーが新しい行を送信したときにも保存したくない場合を除きます。

于 2013-10-22T17:58:21.920 に答える
1

の動作はscanner.nextLine()、JAVADOC で次のように説明されています。

このスキャナを現在の行を超えて進め、スキップされた入力を返します。このメソッドは、最後の行セパレーターを除いて、現在の行の残りを返します。位置は次の行の先頭に設定されます。

Enterの実行後に右を押そうとしていると思いますSystem.out.printl(whaever you were doing)。ドキュメントが示唆しているように、新しい行を挿入しようとすると、行区切り記号を省略した newLine 入力としてカウントされるため、caracter文字列は空の文字列になります""

  caracter = teclado.nextLine(); // press an ENTER
  System.out.println(caracter.equals("")); 
        // it will print true if you press ENTER while it was asking for input 
  m1[fila][col] = caracter.charAt(0); 
        // asking to get index `0` while it is empty!

tryをすぐに実行した後System.out.println()、コンソールをマウスでクリックしてキャレットを表示し、入力を挿入します。あなたはそれが働いていることがわかります!!

于 2013-10-22T18:38:13.157 に答える