1
public boolean catDog(String str)
{
   int count = 0;

   for (int i = 0; i < str.length(); i++)
   {
      String sub = str.substring(i, i+1);

      if (sub.equals("cat") && sub.equals("dog"))
         count++;
   }

   return count == 0;
}

catDog の私のコードがあります。しばらく作業を続けていますが、何が問題なのかわかりません。助けていただければ幸いです!*/

編集- 文字列「cat」と「dog」が指定された文字列に同じ回数出現する場合、true を返したいです。

4

5 に答える 5

6

1 つの問題は、これが決して真ではないということです。

if (sub.equals("cat") && sub.equals("dog"))

&& は and を意味します。|| またはを意味します。

ただし、別の問題は、コードを機能させようとしてランダムに動き回っているように見えることです。誰もが最初のプログラミングのクラスでこれをある程度行いますが、それは悪い習慣です。コードを書く前に、問題を解決する方法を頭の中で明確に思い浮かべてください。コードを書いてから、コードが実際にあなたがすべきだと思っていることを実行し、最初の解決策が正しかったことを確認してください。

編集:あなたの機能が何をすべきかを明確にしたので、私が言ったことは2倍になります。問題を解決するためのあなたのアプローチは正しくないため、実装を混乱させるのではなく、問題を解決する方法を再考する必要があります。

于 2009-04-20T02:14:59.910 に答える
4

私は宿題のためにコードを与えることを信じていないので、ここに批評があります。しかし、あなたは少なくとも、ここに宿題を投稿しているピエロのほとんどよりも優れているものを試しました.

  • 2 つの変数が必要です。1 つは猫の発生を格納するため、もう 1 つは犬のため、または違いを伝える方法です。
  • 部分文字列に十分な文字がありません。
  • 文字列が猫と犬の両方になることは決してありません。それらを個別にチェックし、正しいカウントを更新する必要があります。
  • catcount が dogcount と等しい場合、 return ステートメントは true を返す必要がありますが、猫と犬の違いを保存した場合でもバージョンは機能します。

それ以外は、すべての位置をチェックするのではなく、文字列検索を使用しますが、それが次の課題になるかもしれません。あなたが選択した方法は、CS101 タイプの宿題に最適です。

上記のポイントに対処すれば、かなり簡単に機能するはずです。試してみたいことの 1 つは、次のようなコードの重要な場所にデバッグ ステートメントを挿入することです。

System.out.println(
    "i = " + Integer.toString (i) +
    ", sub = ["+sub+"]" +
    ", count = " + Integer.toString(count));

forループの右中括弧の直前。これは、コードの何が間違っているのかを理解する上で非常に貴重です。

これが私の ROT13 バージョンです。あまりにも多くの問題に遭遇し、それと比較したい場合は、最初に自分のバージョンを動作させずに使用しないでください。それは長期的には役に立ちません。そして、教育者が盗作を検出するために StackOverflow を追跡していることはほぼ確実であるため、短期的には役に立ちません。

私が本当に気にしているわけではありませんが、雇用プールに愚かなコーダーが多ければ多いほど、それは私にとって良いことです:-)

choyvp obbyrna pngQbt(Fgevat fge) {
    vag qvssrerapr = 0;
    sbe (vag v = 0; v < fge.yratgu() - 2; v++) {
        Fgevat fho = fge.fhofgevat(v, v+3);
        vs (fho.rdhnyf("png")) {
            qvssrerapr++;
        } ryfr {
            vs (fho.rdhnyf("qbt")) {
                qvssrerapr--;
            }
        }
    }
    erghea qvssrerapr == 0;
}
于 2009-04-20T03:35:07.393 に答える
0

これを行うための私のコード:

public boolean catDog(String str) {

    if ((new StringTokenizer(str, "cat")).countTokens() ==
        (new StringTokenizer(str, "dog")).countTokens()) {

        return true;
    }
    return false;
}

これがあなたを助けることを願っています

編集:文字列に2つのトークンを並べて配置できるため、このコードは機能しません。StringUtils Apache コモンズ ライブラリのcountMatchesを使用する場合に最適です。

于 2009-04-20T07:36:24.067 に答える
-1
String sub = str.substring(i, i+1);

上記の行は 2 文字の部分文字列しか取得していないため、"cat" を取得する代わりに "ca" を取得し、一致することはありません。これを修正するには、'i+1' を 'i+2' に変更します。

編集:コメントで質問を明確にしたので、2 つのカウンター変数が必要です。1 つは「犬」をカウントし、もう 1 つは「猫」をカウントします。その後、最後に true if を返しますcount_cats == count_dogs

于 2009-04-20T02:16:55.317 に答える