0

入力からJava文字列を圧縮するための基本的なJavaプログラムを作成しようとしています。などaabbccdddd、にa2b2c2d4。プログラムは、最後の文字を処理しないことを除いて、私が求めることをa2b2c2行いa2b2c2d4ます。私は何を間違っていますか?

for(x = 0, y = 1; x<input.length()-1; x++)
  {
      if (input.charAt(x) != input.charAt(x+1) && count == 1)
      {
        System.out.print(input.charAt(x));
        System.out.print(count);
      }

      else if (input.charAt(x) == input.charAt(x+y))
      {
        count++;          
      }

      else if (input.charAt(x) != input.charAt(x+1) && count >= 2)
      {
        System.out.print(input.charAt(x));
        System.out.print(count);
        count = 1;

      }
      else
      {
        System.out.println("fail");
      }
  }
4

4 に答える 4

1

次の文字が現在の文字と同じでない場合、カウントを出力します。最後の文字の次の文字はありません。そのため、出力に表示されません。

アプローチ1

ループの後に次の 2 行を追加する必要があります。

System.out.print(input.charAt(input.length()-1));
System.out.println(count);

アプローチ 2

元の入力を変更しても問題がない場合。入力の最後に追加の文字を追加できます。この追加文字は、元の文字列には決して現れない文字でなければなりません。だと言って#

ループの開始前にこれを行います。

input += "#"; 
for(...)
于 2013-09-26T04:18:26.140 に答える
0

状態のため、目的の結果を得ることができません

else if(input.charAt(x)!=input.charAt(x+1)&&count>=2)

x+1 の位置に文字がないため失敗します。したがって、別の条件を追加して、それが最後の文字かどうかを確認してから、コードを進めることができます

while (input.charAt(x) != input.length()-1)
于 2013-09-26T04:42:56.443 に答える