1

テキストファイルからスキャンインする単語検索プログラムを書いています。テキストファイルには、2つの整数(パズルの寸法、この場合は10x10)、パズル、別の整数(検索する単語の量)、最後に検索する単語が含まれています。プログラムが次の行をスキャンするforループを実行し、文字列内の各文字を2D配列に追加するように、コードを記述しようとしています。ただし、forループによると、スキャナーは10回以下で実行する必要がありますが、スキャナーはファイルを継続し、最終的にはファイルの「範囲外」になります(パズルのサイズは10x10です)。

問題のあるコードは次のとおりです。

Scanner scan = new Scanner(new File("puzzle.txt"));
    int rows = scan.nextInt();
    int columns = scan.nextInt();   
    int [][] wordSearch = new int[rows][columns];

    for (int i = 0; i < rows; i++){
        for (int j = 0; j < columns; j++){
            String temp = scan.nextLine();
            for (int k = 0; k < temp.length(); k++){
                wordSearch[i][j] = temp.charAt(k);

              }
            }
        }

これがpuzzle.txtです:

  • 10 10
  • WVERTICALL
  • ROOAFFLSAB
  • ACRILIATOA
  • NDODKONWDC
  • DRKESOODDK
  • OEEPZEGLIW
  • MSIIHOAERA
  • ALRKRRIRER
  • KODIDEDRCD
  • HELWSLEUTH
  • 10
  • 探す
  • ランダム
  • SLEUTH
  • 後退
  • 垂直
  • 対角線
  • ウィキペディア
  • 水平
  • WORDSEARCH
4

1 に答える 1

3

ただし、forループによると、スキャナーは10回以下で実行する必要がありますが、スキャナーはファイルを継続し、最終的にはファイルの「範囲外」になります(パズルのサイズは10x10です)。

いいえ、ループを見てください:

for (int i = 0; i < rows; i++){
    for (int j = 0; j < columns; j++){
        String temp = scan.nextLine();

各行と各列に対して実行しています。私はあなたが実際に望んでいると思います:

for (int i = 0; i < rows; i++) {
    String temp = scan.nextLine();
    for (int j = 0; j < columns; j++) {
        wordSearch[i][j] = temp.charAt(j);
    }
}

もちろん、これは、各行の長さを列数に正しく設定していることを前提としています。行を読んだ後で、それを検証することをお勧めします。

疑惑を提起すべき1つのことは、この内側のループでした。

for (int k = 0; k < temp.length(); k++) {
    wordSearch[i][j] = temp.charAt(k);
}

wordSearch[i][j]これにより、のすべての文字で同じものが上書きされtemp、最後の反復を除くすべてが無意味になります。

于 2012-09-27T21:00:11.480 に答える