Frage

Ich habe mich gefragt, wie ich das am besten umsetzen könnte.

Ich kann mir keinen guten Weg vorstellen, um die Informationen zu speichern, die wie der Index und die Anzahl der Werte und schließlich die tatsächliche Zahl gespeichert werden müssen, die sich wiederholt

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++)
    { 




    }

}



}
War es hilfreich?

Lösung

Sie könnten eine 2D-ArrayList verwenden, die wie folgt deklariert wird:

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

und deklarieren Sie dann die 2 ArrayLists, die am Ende des Prozesses hinzugefügt werden sollen:

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

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

Dann

1) Durchlaufen Sie die Liste und prüfen Sie, ob das Element mit dem vorherigen identisch ist.

Wenn dies der Fall ist, fahren Sie bis zum Ende fort oder es wird ein anderes Element entdeckt. Speichern Sie dann die Anzahl der vorherigen gleichen Elemente in der ArrayList mit dem Namen „Länge“ und den Wert des Elements in dem Element mit dem Namen „Wert“.Haben Sie ein int (genannt index say), das den Index des Elements in der Länge speichert, die die Länge der längsten aktuellen Teilsequenz enthält (die mit dem Index des Elements identisch ist, das den Wert des Elements enthält, aus dem es besteht (das hat). Wert gespeichert wurde)).

Ist dies nicht der Fall, fahren Sie mit dem nächsten Element fort.

2) Wiederholen Sie den Vorgang und aktualisieren Sie gegebenenfalls den Index (d. h.wenn eine längere Teilsequenz entdeckt wird).

Um am Ende Länge und Wert zum Ergebnis hinzuzufügen, tun Sie es einfach result.add(length); Und result.add(value);

Wenn Sie ein Objekt zurückgeben möchten, das alle erforderlichen Informationen enthält, können Sie den int „index“ in einen Integer einschließen und ihn am Ende der ArrayList namens „length“ hinzufügen oder ihn sogar in eine neue ArrayList einfügen und diese ArrayList hinzufügen dazu führen.

Beachten Sie, dass Sie Folgendes tun müssen, um ein Element am Index i in der ersten ArrayList (in diesem Fall das mit dem Namen „length“) abzurufen, nachdem es im Ergebnis gespeichert wurde

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

BEARBEITEN:

Der for-Schleifenteil, den ich im Sinn hatte, wäre also dieser:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top