2016-10-18 16 views
1

こんにちは私は学生ですが、より詳細な質問はこれです。文字列と2文字

文字列と2文字(c1とc2)が与えられた場合、「axb」が文字列内で発生する回数を返します。ここでxは任意の文字です。たとえば、文字列「antiaircraft」と文字「a」と「t」が指定されている場合、メソッドは2を返します。3文字のパターンが重複する可能性があります。たとえば、「aaaa」には2つの「axa」があります。

は今、私がこれまでに書きとめたもの

public int countAxA(String str, char c1, char c2) { 

int count = 0; 
    for (int i=0; i < str.length(); i++) 
    { 
     if (str.charAt(i) == c2) 
     { 
      count++; 
     } 
    } 
    return count; 
} 

あるので、宿題に応じて、入力の一部が動作しますが、他にはありません。私が行方不明のものはありますか?

+0

使用は() 'c1'と' c2'で何文字列 –

+0

に等しいですか?あなたは 'c1xc2'の出現を見たいですか? –

+0

@KorayTugayだから、私はc1.equals(c2)をやるだろうか? – SktSkat

答えて

0
public int countAxA(String str, char c1, char c2) { 

int count = 0; 
    for (int i=0; i < str.length(); i++) 
    { 
     if (str.charAt(i) == c1) 
     { 
      if(i+2 < str.length() && str.charAt(i+2) == c2) 
       count++; 
     } 
    } 
    return count; 
} 

はこれを試してみてください!

+0

ああ、私は論理と演算子でifステートメントが欠けていた。ありがとうございました。 – SktSkat

+0

@SktSkat私の答えをチェックする - より一般的です。 – xenteros

+0

なぜ 'for(int i = 0; i

1

一度だけ反復して追跡すること、そしてあなたが最初の文字を見つけることが起こるならば、先読みん:

public int countAxA(String s, char one, char two) { 
    char[] cs = s.toCharArray(); 
    int count = 0; 
    for (int i = 0; i < cs.length - 2; i++) { //don't need to go beyond 3rd last char 
     if (cs[i] == one && cs[i + 2] == two) { 
      count++; 
     } 
    } 
    return count; 
} 
+0

カウントを返す必要があります。真または偽ではありません。 –

+0

おっと、簡単に修正しました。 – Rogue

+0

char配列を取得する必要はありません。それは文字列のchar配列のコピーを作成します(char配列が変更可能であるため)。ちょうど 'charAt'を使用してください。 –

0
public int countAxA(String str, char c1, char c2) { 


int count = 0; 
for (int i=0; i < str.length()-2; i++) 
    { 
    if (str.charAt(i) == c1 && str.charAt(i+2) == c2) 
     { 
      count++; 
     } 
    } 
    return count; 

} 

これを試してみてください。.. だけC2をチェックしている、 ので、入力として tanticarftが出力になります:-3

いますが、C1とC2をチェックする必要が両方

0

考えますあなたの割り当ての指示、あなたのプログラムはより長くなるはずです。あなたがここに

if (str.charAt(i) == c2) { count++; }

やっていることは、単に文字c2が発生した回数をカウントしています。

このようなものを使用してみてください、

if(str.charAt(x)==c1 && str.charAt(x+2) ==c2) 
    count ++ 

この文を使用して、あなたは今AXBが存在するかどうかをチェックし、あなたがAXBの発生に実行するたびにカウントする1を追加しています。

+0

外出すると 'x + 2'のチェック文を追加します –

+0

@User_Targaryenはい、生徒自身、私はそれがフィードの答えをスプーンするのは良くないと知っています。私はGoogleをあまりにも多く活用し、1年間はコードを覚えることなくコード化しました。しかし、はい、あなたは境界内にとどまることを確認する必要があります。 –

0

あなたは正しい軌道に乗っていました。

public int countAxA(String str, char c1, char c2) 
    { 
     int count = 0; 
     for (int i=0; i < str.length(); i++) 
     { 
     if (str.charAt(i) == c1 && i +2 < str.length && str.charAt(i+2) == c2) 
     { 
      count++; 
     } 
     } 
    return count; 
} 
  1. ループstr内のすべての文字を超えます。
  2. 現在のcharが存在する場合、現在のインデックス+ 2が境界
  3. 外でない場合、すべての条件は、次に満たされる場合、最後に+現在のインデックスでC2の2
  4. をチェックし、チェック
  5. をC1と等しいかどうかをチェック増分カウント;
0

これを試してみてください。..

int count=0, incrementCounter=2; 
     for(int i=0;i<str.length();i++){ 
      if(str.charAt(i)==c1){ 
       if(str.charAt(i+incrementCounter)==c2 && incrementCounter<=str.length()){ 
        i = i+incrementCounter; 
        count++; 
       } 
      } 
     } 
     System.out.println(count); 
関連する問題