2011-12-08 110 views
-2

这段代码可以找到一个单词,如果它从左到右,我怎样才能找到一个单词从右到左和从上到下?Java东西向和西向东发现者

boolean findWE(String word) { 
    for (int r = 0; r < height; r++) { 
    for (int c = 0; c <= width - word.length(); c++) { 
     if (word.charAt(0) == grid[r][c]) { 
     boolean failed = false; 
     for (int i = 0; i < word.length() && !failed; i++) { 
      if (word.charAt(i) != grid[r][c + i]) { 
      failed = true; 
      } 
     } 
     if (!failed) { 
      System.out.printf("%s found WE at(%d,%d)\n", word, r, c); 
      return true; 
     } 
     } 
    } 
    } 
    return false; 
} 
+1

这功课吗? – Bringer128

+0

这不是作业。 – Rls

+3

通过思考和改变程序。如果你还没有得到答案,那么你没有足够的想法。如果你自己解决这个问题,你会学到更多东西,并成为一个更好的Java程序员......不管这是否是作业。 –

回答

1

因为这不是功课,你应该能够使用库函数来扭转一个字符串:

boolean findEW(String word) { 
    StringBuilder builder = new StringBuilder(); 

    // Why are your strings stored as a 2-dimensional character array?? 
    for(int r = 0; r < height; r++) { 
    builder.append(grid[r]); 
    builder.append("\n"); 
    } 

    builder.reverse(); 
    return builder.toString().contains(word); 
} 

或者,由于在“EDCBA”发现“ABC”是倒退与在“edcba”中找到“cba”一样,您可以执行以下操作:

boolean findEW(String word) { 
    return findWE(new StringBuilder(word).reverse()); 
} 
+0

我绝对同意,在实际的代码中,这种方法是可取的。然而,对于学习目的来说,玩弄循环并且以类似于问题中代码段的风格的方式来解决这个问题仍然是有益的。 – Alderath

+1

然后它应该被标记为“家庭作业”。如果不是,那么这个答案完美地解决了这个问题。 – Guillaume