قائمة صفيف وإيجاد أطول لاحقة مع نفس العدد [مغلق]

StackOverflow https://stackoverflow.com//questions/22077983

  •  23-12-2019
  •  | 
  •  

سؤال

كنت أتساءل ما هي أفضل طريقة لتنفيذ ذلك.

لا يمكن التفكير في طريقة جيدة لحفظ المعلومات التي تحتاج إلى حفظها مثل الفهرس وعدد القيم وأخيرا الرقم الفعلي الذي يتم تكراره

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




    }

}



}
هل كانت مفيدة؟

المحلول

هل يمكن استخدام أريليست 2 د ، أعلن مثل هذا:

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

ثم أعلن أن 2 أريليستس تضاف إليها في نهاية العملية:

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

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

ثم

1) كرر من خلال التحقق من القائمة إذا كان العنصر هو نفسه السابق.

إذا كان الأمر كذلك ، فاستمر حتى النهاية أو يتم اكتشاف عنصر يختلف ، وعند هذه النقطة قم بتخزين عدد العناصر المتساوية السابقة في القائمة المسماة ' الطول 'وقيمة العنصر في العنصر المسمى'القيمة'.لديك إنت (يسمى مؤشر يقول) الذي يخزن مؤشر العنصر في الطول الذي يحتوي على طول أطول لاحقة الحالية (والتي سوف تكون نفس مؤشر العنصر الذي يحتوي على قيمة العنصر انها تتكون من (التي تم تخزينها في القيمة)).

إذا لم يكن كذلك ، فانتقل إلى العنصر التالي.

2) كرر العملية ، وتحديث الفهرس إذا لزم الأمر (أي.إذا تم اكتشاف فترة لاحقة أطول).

لإضافة الطول والقيمة إلى النتيجة في النهاية ، فقط افعل result.add(length); و result.add(value);

إذا كنت ترغب في إرجاع كائن واحد الذي يحمل كل المعلومات المطلوبة ، هل يمكن التفاف إنت 'مؤشر' في عدد صحيح وإضافته إلى نهاية أريليست يسمى 'طول' أو حتى وضعه في أريليست جديدة وإضافة أن أريليست إلى النتيجة.

لاحظ أنه لاسترداد عنصر في الفهرس الأول في أريليست الأولى (في هذه الحالة واحد يسمى 'طول') بعد أن تم تخزينها في النتيجة ، سوف تحتاج إلى القيام به

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

تحرير:

لذا فإن الجزء الخاص بالحلقة الذي كنت أفكر فيه سيكون هذا:

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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top