0

さて、スタックに複数の値をプッシュしないことを含むプロジェクトを行っているため、重複をチェックする方法の概念がわかりました。これまでのところ、私のコードは標準です。スキャナーを文字列に保存し、文字列を配列に保存してから、このwhileループを実行します。

int c=0;
  while(counter < inAr.length)
  {
     String w1 = inAr[c];
     String w2 = inAr[c + 1];
     if(w1 != w2)
     {
        counter++;
        so.push(inAr[c]);
        c++;
        temp++;
     }
     else
     {
        counter++;
        c++;
     }
  }

さて、問題に進みます。inAr[c + 1] の arrayindexoutofbounds を取得していますが、取得できないのは、inAr[1]、inAr[2] などすべてが値を保持していることです。[c + 1] を [1] のような定数に置き換えると、プログラムは正常に動作し、動作します.... この時点でとても迷っています。誰か助けてください。

4

3 に答える 3

3

の場合を考えてみましょうc = inAr.length-1

この時点で、while ループに入ります ( 0 への初期化を想定して、各反復で と は同じ値を持ちます) ccounter

inAr[c+1]inAr[inAr.length]常に範囲外です。

修正: ループを変更するwhile(counter < inAr.length - 1)か、カウンターを 1 に初期化します。

==編集: Strings をorと比較しないでください!=。あなたのifステートメントは次のようになります。

if(!w1.equals(w2))

ただし、これは実際の質問には関係ありません。後で問題が発生する可能性があります。

于 2013-10-01T20:23:58.200 に答える
0

あなたのコードはループの最初ではなく、ループの終わりで壊れています。

ccounter条件がチェックされると常に等しくなり、最終的には- 1counterに等しくなります。inArr.lengthc + 1inArr.length

0配列は常に(ではなく)インデックスから始まる1ため、次のようなものを実行すると常に例外が発生します

mystr = inAr[inArr.length]

whileループの最後の反復となるときに効果的に行っていることです。

于 2013-10-01T20:27:04.900 に答える