-1

ファイルを文字ごとに 2 次元配列に読み込もうとしていますが、それを行うコードがありますが、文字の最初の行が読み取られた後、配列内の次のスペースには何も設定されず、文字が設定されますそれは 1 スペース先のそのスペースにあるはずです。どうすれば修正できますか?

   for(int x = 0; ((c = br.read()) != -1) && x < w.length*w.length; x++) {
     w.currentChar = (char) c;
     w.row = x/w.length;
     w.column = x%w.length;
     w.wumpusGrid[w.row][w.column] = w.currentChar;
     System.out.print(w.currentChar);
     System.out.print(w.row);
     System.out.print(w.column);
   }
4

2 に答える 2

1

あなたの問題は、行末の '\n' が読み取られ、配列に割り当てられていることです。文字をスキップし、スキップのカウントを保持して、スキップされた文字をオフセットできるようにする必要があります。

int offset = 0;
for(int x = 0; ((c = br.read()) != -1) && x < w.length*w.length; x++) {
  if (c == '\n') {
    offset++;
    continue;
  }
  int pos = x - offset;
  w.currentChar = (char) c;
  w.row = pos/w.length;
  w.column = pos%w.length;
  w.wumpusGrid[w.row][w.column] = w.currentChar;
  System.out.print(w.currentChar);
  System.out.print(w.row);
  System.out.print(w.column);
}
于 2013-03-12T21:19:26.220 に答える
0

あなたの問題は、行末 ( '\n'(linux/mac) または'\r\n'(win)) にあり、それらを文字として扱っています。xどの文字が読み取られたかに関係なく、あなたは増えています。x++定義の最後の部分を取り出し、ループfor本体の最後に移動します。ループの開始時continueif c == '\n' || c == '\r'(両方の文字はあなたにとって興味深いものではないと思います)

于 2013-03-12T21:39:43.120 に答える