0

これを実装する最良の方法は何だろうと思っていました。

インデックスや値の数、最後に繰り返される実際の数など、保存する必要がある情報を保存する良い方法を考えることができません

public class testing 
{

public static void main(String[] args) 
{
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    Scanner in = new Scanner(System.in);
    Integer a =0;
    Integer value = 0;
    Integer num = 0;

    boolean loop = true;
    //getting the string information
    while(loop)

    {
        System.out.println("Enter a series of numbers, 0 to stop");
        Integer n = in.nextInt();
        if(n.equals(0))
        {
            break;
        }
        else
        { 
            numbers.add(n);         

        }



    }

    for (int i = 1; i < numbers.size(); i++)
    { 




    }

}



}
4

1 に答える 1

1

次のように宣言された 2d ArrayList を使用できます。

ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

次に、プロセスの最後に追加される 2 つの ArrayLists を宣言します。

ArrayList<Integer> length = new ArrayList<Integer>();

ArrayList<Integer> value = new ArrayList<Integer>();

それで

1) 要素が前と同じかどうかをチェックするリストを反復処理します。

そうである場合は、最後まで続行するか、異なる要素が検出されるまで続行します。その時点で、以前の等しい要素の数を 'length' と呼ばれる ArrayList に格納し、要素の値を 'value' と呼ばれる要素に格納します。最長の現在のサブシーケンスの長さを含む長さの要素のインデックスを格納する int (index say と呼ばれる) を持ちます (これは、要素の値を含む要素のインデックスと同じになります)。 value に格納されています))。

そうでない場合は、次の要素に移動します。

2) プロセスを繰り返し、必要に応じてインデックスを更新します (つまり、より長いサブシーケンスが発見された場合)。

最後に長さと値を結果に追加するには、次のようにしますresult.add(length);result.add(value);

必要なすべての情報を保持する 1 つのオブジェクトを返したい場合は、int 'index' を Integer でラップし、それを 'length' と呼ばれる ArrayList の最後に追加するか、新しい ArrayList に入れてその ArrayList を追加することもできます結果に。

結果に格納された後、最初の ArrayList (この場合は「長さ」と呼ばれるもの) のインデックス i にある要素を取得するには、次のようにする必要があることに注意してください。

result.get(0).get(i);

編集:

したがって、私が念頭に置いていた for ループの部分は次のようになります。

boolean same = false;
int sequenceLength = 0;
Integer sequenceInteger = null; 

for (int i = 1; i < numbers.size(); i++)
        { 
            if(numbers.get(i).equals(numbers.get(i-1)))
                {
                      same = true;
                      sequenceLength++;
                }      
            else(if same == true)
                {
                      sequenceInteger = new Integer(sequenceLength);
                      //add sequenceInteger to length and numbers.get(i-1) to value 
                      same = false;
                      sequenceLength = 0;
                }
            // else do nothing since same is false, which means that the current
            // element is different from the previous and the previous is 
            // different the one before that, so there are no new values to store
        }
// end of list reached
(if same == true)
{
      sequenceInteger = new Integer(sequenceLength);
      //add sequenceInteger to length and numbers.get(i-1) to value 
      same = false;
}
于 2014-02-27T19:33:25.640 に答える