2011-12-29 4 views
0

私はボード([17] [17])を持っていて、それに行と列を与える言葉を置きます。与えられた単語の位置がボードより大きければ、メッセージが表示されます。行と列をもう一度与えます。ボードはどこで終了するのですか?

**Board class** 
    ...... 
    public void placeWord(char[][] board, String word, int x, int y) 

for (int i = 0; i < word.length(); i++) 
    { 
    if (y + i >= board[x].length) 
     { 
      System.out.println("The board is smaller!!"); 
       Board b=new Board(); 
       int a,r; 
       System.out.println("Give row and column again"); 
       a=in.nextInt(); 
       r=in.nextInt(); 
       b.placeWord(board, word, a, r); 
     } 

    else { 
     board[x][y + i] = word.charAt(i); 
     } 
    } 

私はa = 3とr = 5を与えても、それでも私は "ボードは小さくなっています!"新しい値をもう一度与えたいと思います。これを修正する方法を知っている人は誰ですか?

編集a=3 and r=5から

**main()** 
board b=new board(); 
String s="abc"; 
int x=2,y=20; 
b.placeWord(Board, s, x, y); 

for(int i=0;i<Board.length;i++)//prints the board 
    { 
      System.out.println(Board[i]); 

     } 
+0

「ワード」の長さはどのくらいですか? – Howard

+0

私はあなたが少し明確にしなければならないと思う。私はこれを数分間見てきましたが、あなたが求めているものを解析することはできません。呼び出しと戻り値の例は素晴らしいでしょう。 –

+0

新しい 'Board'を作成し、' placeWord'メソッドの途中で 'placeWord'を呼び出すことは助けになりません。 – Paul

答えて

0

私はあなたがすでに最初の場所で単語を置くために失敗し、新しい行/列を入力する疑いがあります。

この場合、 "古い" forループはまだ完了しておらず、b.placeWord(...);の呼び出しの後に文字が残っていれば(残っている限り)続けます。

これを回避する1つの方法は、b.placeWord(...);を呼び出した後に簡単なbreak;ステートメントでループを解除することです。

注:新たに作成されたボードbに2回目の単語を入力すると、それ以降は破棄されます(私たちに示したコードのどこにも決してアクセスされません)。さらに、最初にのテストと入力してください(実際にはループなしで行うことができます:y+word.length()<=board[x].length())。そうしないと、失敗した試行の残りの部分がボード上に残ります。

+0

はい、あなたはこれをブレーク・ワードで書いています!!そして、あなたが正しいと言えば、単語が合うならば、firtsをテストするべきです...しかし、この "y + word.length()<= board [x] .length()" ?のための外側? – nick

+0

@nickはい、ループの外に置く必要があります(一度だけチェックされるように)。 – Howard

0
**Board class** 
    ...... 
    public void placeWord(char[][] board, String word, int x, int y) 
    if (y + word.length() >= board[x].length) 
    { 
     // don't loop, ask for another position to put word 
     System.out.println("The board is smaller!!"); 
     Board b=new Board(); 
     int a,r; 
     System.out.println("Give row and column again"); 
     a=in.nextInt(); 
     r=in.nextInt(); 
     b.placeWord(board, word, a, r); 
    } else 
    { 
     // already done the checking, don't need to worry here 
     for (int i = 0; i < word.length(); i++) 
     { 
     board[x][y + i] = word.charAt(i); 
     } 
    } 
関連する問題