2011-12-29 23 views
0

我有一個董事會([17] [17]),我在其中放置單詞給行和列。我想如果單詞的位置比單板大,那麼顯示一條消息,你應該再次給出行和列。我如何指定o板的結束位置?

**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時,它仍然會打印出「The board is smaller !!」並希望再次賦予新的價值。有誰知道如何解決這個問題?

編輯

**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

'word'有多長? – Howard 2011-12-29 17:59:41

+0

我想你將不得不澄清一點。我一直在看這幾分鐘,我無法解析你在問什麼。一個示例調用和返回值將會很好。 – 2011-12-29 18:01:19

+0

製作一個新的'Board',然後在'placeWord'方法的中間調用'placeWord'不會有幫助。 – Paul 2011-12-29 18:01:49

回答

0

a=3 and r=5我懷疑你已經失敗放置字擺在首位,並進入了一個新的行/列。

在這種情況下,舊的for循環還沒有完成,並且在b.placeWord(...);的調用之後將繼續放置字母(只要有剩餘的字母)。

避免這種情況的一種方法是在呼叫b.placeWord(...);之後通過簡單的break;聲明打破循環。

注意:第二次,你將這個詞填充到你剛剛創建的電路板b中,之後你會放棄它(它在你向我們展示的代碼中從來不會被訪問)。此外,您可能會首先測試如果該單詞適合(實際上可以完成沒有循環:y+word.length()<=board[x].length()),然後填寫字母。否則,失敗嘗試的剩餘部分將留在董事會中。

+0

是的,你是正確的這與休息措辭!!你是對的我應該測試firts,如果這個詞適合....但我在這裏「y + word.length()<= board [x] .length()」 ?外面的? – nick 2011-12-29 18:12:03

+0

@nick是的,你應該把它放在循環之外(這樣它只被檢查一次)。 – Howard 2011-12-29 18:39:03

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); 
     } 
    }