1

これが問題です: 文字列を指定して、'y' または 'z' で終わる単語の数を数えます。つまり、"heavy" の "y" と "fez" の "z" は数えますが、"y" は数えません。 ' は「黄色」です (大文字と小文字は区別されません)。直後にアルファベット文字がない場合、y または z は単語の末尾にあると言えます。(注: Character.isLetter(char) は、char がアルファベット文字かどうかをテストします。)

countYZ("fez day") → 2
countYZ("day fez") → 2
countYZ("day fyyyz") → 2

これは私のコードです:

public int countYZ(String str) {
  int count = 0;
  for (int i=0; i<str.length(); i++){
  if (Character.isLetter(i) && (Character.isLetter(i+1)==false || i+1==str.length()) && (Character.toLowerCase(str.charAt(i))=='y' || Character.toLowerCase(str.charAt(i))=='z')){
  count++;
  }
  }
  return count;
}

面倒なことはわかっていますが、なぜ今うまくいかないのかを理解しようとしています。実行するたびに「0」を返します。if ステートメントでは、次のことをチェックしています。i+1 は文字ですか、それとも文字列の末尾ですか? 最後に、i が 'y' または 'z' の場合。助けてくれてありがとう!

4

10 に答える 10

3

使用split()してendsWith()

public static int countYZ(String str) {
        int count = 0;
        String temp[] = str.split(" ");
        for (int i = 0; i < temp.length; i++) {
            if (temp[i].trim().endsWith("y") || temp[i].trim().endsWith("z"))
                count++;
        }
        return count;
    }

出力:必要に応じてすべてのケースに対して

countYZ("fez day") → 2
countYZ("day fez") → 2
countYZ("day fyyyz") → 2
于 2013-09-06T05:56:28.580 に答える
2

この修正を試してください

    for (int i = 0; i < str.length(); i++) {
        if ((Character.toLowerCase(str.charAt(i)) == 'y' || Character
                .toLowerCase(str.charAt(i)) == 'z')
                && i == str.length() - 1
                || !Character.isLetter(str.charAt(i + 1))) {
            count++;
        }
    }
于 2013-09-06T05:58:18.743 に答える
0

これも試すことができます

 public static void main(String[] args){
    System.out.println(countYZ("abcxzy"));
}

public static int countYZ(String str) {
    int countYandZ=0;
    String[] arr=str.split(" ");
    for (String i:arr){
        if(("Y".equalsIgnoreCase(String.valueOf(i.charAt(i.length()-1))))||("Z".equalsIgnoreCase(String.valueOf(i.charAt(i.length()-1))))){
              countYandZ++;
        }
    }
    return countYandZ;
}
于 2013-09-06T06:10:46.680 に答える
0

次の2つの条件のため、コードが機能していません

Character.isLetter(i) --> ここでは、int である i の isLetter をチェックしています。

(Character.isLetter(i+1)==false -> indexout のエラーが発生します

以下を確認してください。正常に動作していることを確認しました。コードの変更されたバージョンです

public class FirstClass {
    public static void main(String args[]) {
        String string="fez day";
          int count = 0;
         String[] strcheck = string.split(" "); 
         for (String str : strcheck) {
          if (Character.isLetter(str.charAt(str.length()-1)) &&(Character.toLowerCase(str.charAt(str.length()-1))=='y' || Character.toLowerCase(str.charAt(str.length()-1))=='z')){
              count++;
          }
         }
          System.out.println(count);
        }
}

これが役に立てば幸いです、頑張ってください

于 2013-09-06T06:10:49.500 に答える
0

これが私がやったことです:

public int countYZ(String str) {
      //Initialize a return integer
      int ret = 0;
      //If it has at least 2 characters, we check both ends to see how many matching instances we have.
      if (str.length() >= 2)
      {
        if (!Character.isLetter(str.charAt(1)) && (str.charAt(0) == 'y' || str.charAt(0) == 'Y' || str.charAt(0) == 'z' || str.charAt(0) == 'Z')) 
        {
          ret++;
        }
        if (Character.isLetter(str.charAt(str.length() - 2)) && (str.charAt(str.length()-1) == 'y' || str.charAt(str.length()-1) == 'Y' || str.charAt(str.length()-1) == 'z' || str.charAt(str.length()-1) == 'Z')) 
        {
          ret++;
        }
      }
      //If it has more than 3 characters, we check the middle using a for loop.
      if (str.length() >= 3)
      {
        for (int i = 2; i < str.length(); i++)
        {
          char testOne = str.charAt(i-2);
          char testTwo = str.charAt(i-1);
          char testThree = str.charAt(i);
          //if the first char is a letter, second is a "YZyz" char, and the third is not a letter, we increment ret by 1.
          if (Character.isLetter(testOne) && (testTwo == 'y' || testTwo == 'Y' || testTwo == 'z' || testTwo == 'Z') && (!Character.isLetter(testThree)))
          {
            ret++;
          }
        }
      }
      return ret;
    }
于 2016-12-20T03:37:15.387 に答える