0

文字列を読み取り、繰り返しのセットをカウントするコードを書いています

public int countRepeatedCharacters()
{
    int c = 0;
    for (int i = 1; i < word.length() - 1; i++)
    {
        if (word.charAt(i) == word.charAt(i + 1)) // found a repetition
        {
            if ( word.charAt(i - 1) != word.charAt(i)) {

                c++;

            }
        }
    }     
    return c;
}

入力 aabbcdaaaabb を試すと、4 組の繰り返し小数 aa | bb | あああ | bb

インデックスが1から始まるため、最初のセットaaを読んでいないことはわかっています。ゼロを読み取るように修正しようとしましたが、変更に対応するようにループ全体を修正しようとしましたが失敗しました。インデックスやループを変更するには?

4

6 に答える 6

1

この方法を試してください。繰り返し文字のセットをカウントします。

public static void main(String[] args) {
    String word = "aabbcdaaaabbc";
    int c = 0;
    for (int i = 0; i < word.length()-1; i++) {

        // found a repetition
        if (word.charAt(i) == word.charAt(i + 1)) {
            int k = 0;
            while((i + k + 1) < word.length()) {
                if(word.charAt(i+k) == word.charAt(i + k + 1)) {
                    k++;
                    continue;
                }
                else {
                    break;
                }
            }
            c++;
            i+=k-1;
        }
    }
    System.out.println(c);
}
于 2013-04-19T10:39:26.177 に答える
1

これを試して - -

    public int countRepeatedCharacters()
{
    int c = 0,x=0;
    boolean charMatched=false;
    for (int i = 0; i < word.length(); i++)
    {
        if(i==word.length()-1)
        {
            if (word.charAt(i-1) == word.charAt(i))
                 c++;
            break;
        }
        if (word.charAt(i) == word.charAt(i + 1)) // found a repetition
        {

            charMatched=true;
            continue;
        }
        if(charMatched==true)
        c++;
        charMatched=false;          
    }     
    return c;
}
于 2013-04-19T10:04:37.390 に答える
1

このコードを試してください:

public int countRepeatedCharacters(String word)
{
    int c = 0;
    Character last = null;
    bool counted = false;
    for (int i = 0; i < word.length(); i++)
    {
        if (last != null && last.equals(word.charAt(i))) {  // same as previous characted
            if (!counted) {  // if not counted this character yet, count it
                c++;
                counted = true;
            }
        }
        else {      // new char, so update last and reset counted to false
            last = word.charAt(i);
            counted = false
        }
    }     
    return c;
}

編集 - aaaa を 4 としてカウントし、1 としてカウントするように修正

于 2013-04-19T09:52:57.933 に答える
0

次のようなことを試すことができます:-

public static void main(String str[]) {
    String word = "aabbcdaaaabbc";
    int c = 1;
    for (int i = 0; i < word.length() - 1; i++) {
        if (word.charAt(i) == word.charAt(i + 1)) {
            c++;
        } else {
            System.out.println(word.charAt(i)+ " = " +c);
            c = 1;
        }
    }
    System.out.println(word.charAt(word.length()-1)+ " = " +c);
}

sysoutsおよびその他のものを削除することにより、必要に応じてこれを変更できます。

于 2013-04-19T09:49:20.950 に答える
0

length() -1 を使用すると、計算で最後の文字が考慮されなくなります。これにより、最後の反復文字が失われます。

最後に、私は次のようにこれを行ったでしょう:

 public static int countRepeatedCharacters(String word)
    {
        boolean withinRepeating = false;
        int c  = 0;

        for (int i = 1; i < word.length(); i++)
        {

            if (!withinRepeating && (withinRepeating = word.charAt(i) == word.charAt(i - 1)))
            c++;                        
            else
            withinRepeating = word.charAt(i) == word.charAt(i - 1);
        }     
        return c;
    }
于 2013-04-19T09:52:45.263 に答える