0

数値1、2、または3のみを含む10個のインデックスの配列リストがあるとします。可能であれば同じ番号を連続して繰り返さずに、これらを印刷しようとしています。

たとえば、arraylistには数値{1,1,1,2,1,2,2,3,1,2}が含まれています。次のように出力します:{1,2,3,1,2,1,2 、1,2,1}

これが私がやろうとしていることよりもずっと簡単にできるなら申し訳ありません。私はまだプログラミングにかなり慣れていません。

    int j;
    int k;
    for (j=0; j<p.size()-1;j++)
    {
        for(k =1; k<p.size()-1;k++)
        {      
            if(p.get(k)==p.get(j))
            {
    //       Person temp = p.get(j);
    //       p.remove(j);
    //       p.add(temp);
            }        
        }
    }
4

2 に答える 2

1

それだけではありません..これを試してください:

for (int i = 0; i < list.size() - 1; i++) {
    if (!list.get(i+1).equals(list.get(i)) {
        System.out.print (list.get(i));
    }
}
于 2012-10-18T17:11:44.620 に答える
0

私があなたを正しく理解しているなら、あなたは可能であれば、同じ番号を複数回連続して印刷せずに番号を印刷しようとしています。

これはあなたが求めているものに最も近い単純なアルゴリズムです(昇順を優先し、可能であれば同じ番号を2回続けて繰り返すことは避けてください)質問はすべての可能なケースを定義していないため、すべての仮定をカバーしない場合があります:

  1. 配列リストの要素は1、2、または3のみであるため、最初に配列リストの各要素を読み取り、各1、2、および3の数を数えます。
  2. 変数を使用して、印刷した前の数値を追跡し(最初にこれを3として初期化します)、すべてのカウンターがゼロになるまでループします。

    • 前の数値が3で、1のカウントが> 0の場合:1を印刷し、1を「前の数値」に保存して、カウンターを1だけデクリメントします。
    • それ以外の場合、1 == 0をカウントする場合は、2を試し、次に3を試します。

    • 前の数値が1で、2のカウントが> 0の場合:2を印刷し、2を「前の数値」に保存し、カウンターを2だけデクリメントします。

    • それ以外の場合、2 == 0をカウントする場合は、3を試し、次に1を試します。

    • 前の数値が2で、3のカウントが> 0の場合:3を印刷し、3を「前の数値」に保存し、カウンターを3だけデクリメントします。

    • それ以外の場合、3 == 0をカウントする場合は、1を試してから、2を試してください。
于 2012-10-18T17:28:46.613 に答える