0

这是从老师给我们的单词库中提取的,我应该返回最长的单词,该单词仅包含键盘顶行中的字符。目前它返回空白。请帮忙。

//What's the longest word only using the top row of the keyboard?      
   public static void Question6() {  

      String longestWordSoFar = " ";
      System.out.println("Question 6:");
      for(int i = 1; i < WordList.numWords(); i++) // check every word in wordlist
      {
          if(topRow(WordList.word(i))) { // if the length is greater than the previous word, replace it
          {  
              if(WordList.word(i).length() > longestWordSoFar.length())            
                  longestWordSoFar=WordList.word(i);
              }      
          }

      }
      System.out.println("longest word including top row: " + longestWordSoFar);
      System.out.println();
      return;
   }

public static boolean topRow(String word) {

       for(int i = 0; i < word.length(); i++) {
       //return true if the word has all of the letters in the top row of the keyboard
               if (word.charAt(i) != 'q') {
               return false;
               }
               if (word.charAt(i) != 'w') {
               return false;
               }
               if (word.charAt(i) != 'e') {
               return false;
               }
               if (word.charAt(i) != 'r') {
               return false;
               }
               if (word.charAt(i) != 't') {
               return false;
               }
               if (word.charAt(i) != 'y') {
               return false;
               }
               if (word.charAt(i) != 'u') {
               return false;
               }
               if (word.charAt(i) != 'i') {
               return false;
               }
               if (word.charAt(i) != 'o') {
               return false;
               }
               if (word.charAt(i) != 'p') {
               return false;
               }   
        }
        return true;
   }
4

5 回答 5

5

你的功能topRow没有做你想做的事。q如果单词中的任何字符不是, w, e, r, t, y, u, i,op 同时,它将返回 false 。这永远不会是真的。

于 2013-10-23T08:22:02.013 回答
5

请改用正则表达式。如果s是一个String类型,那么使用

s.matches("[qwertyuiop]+")

匹配键盘顶部行上的一个或多个字母。我会把不区分大小写的问题留给你。

ps打赌答案是“打字机”。

于 2013-10-23T08:22:58.150 回答
1

您的topRow()方法将始终 return false,因为您的单词的每个字符都必须同时是顶行的每个字符(这是不可能的)才能返回true。尝试使用正则表达式。

于 2013-10-23T08:27:11.923 回答
1

我错了还是你的函数总是在第一个字符处返回?

于 2013-10-23T08:28:27.380 回答
1

让我们来看看这条线

if (word.charAt(i) != 'q') {
   return false;
}
if (word.charAt(i) != 'w') {
   return false;
}

现在,如果当前字符( word.charAt(i) )是 'q' 会发生什么?如果它是'w'会发生什么?在任何其他情况下会发生什么?

于 2013-10-23T08:22:47.023 回答