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,tyありuiかつo同時にp ない場合、false が返されます。これは決して真実ではありません。

于 2013-10-23T08:22:02.013 に答える
5

代わりに正規表現を使用してください。型の場合sString使用

s.matches("[qwertyuiop]+")

これは、キーボードの一番上の行にある 1 つ以上の文字に一致します。大文字と小文字は区別しません。

ps きっと答えは「タイプライター」です。

于 2013-10-23T08:22:58.150 に答える
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 に答える
1

を返すには、単語のすべての文字が同時に一番上の行のすべての文字でなければならないため (それは不可能です)、topRow()メソッドは常にを返します。正規表現を使用してみてください。falsetrue

于 2013-10-23T08:27:11.923 に答える