0
int n = sc.nextInt();
char[][] original = new char[n][n];
char [][] result = new char[n][n];
String line;

for (int i = 0; i < n; i++) {
  line = sc.nextLine();
  System.out.println(line);
  for (int u = 0; u < n; u++) {
    original[i][u] = line.charAt(u);
  }
}

for (int i = 0; i < n; i++) {
  line = sc.nextLine();
  for (int u = 0; u < n; u++) {
    result[i][u] = line.charAt(u);
  }
}

次のようなファイルがあります。

2
ha
ah
lo
ol

最初の行に整数 N があり、次に 2 つの N*N 行列の文字があります。

それらを char の配列の 2 つの配列に読み込もうとしていますが、次のエラーが発生します。

スレッド「メイン」での例外 java.lang.StringIndexOutOfBoundsException: 範囲外の文字列インデックス: java.lang.String.charAt(String.java:695) で transform.main(transform.java:25) で 0

25行目は次のとおりです。

original[i][u] = line.charAt(u);

私はそれを理解していません。私はすべてをうまくやっていると思います。何か案は?ありがとうございました!

4

1 に答える 1

2

あなたscはスキャナーインスタンスだと思いますか?メソッドnextInt()はファイルから次の番号を読み取りますが、次の改行は処理しません。したがって、 を最初に呼び出すとnextLine()、空の文字列 (つまり、まだ処理されていない改行までのすべての文字) が返されます。println(...)を呼び出すと、空行が出力されることがわかります。newLine()この動作を修正するために、ループの前にへの呼び出しを挿入できます。

于 2012-04-14T15:16:06.033 に答える