문제

이것을 구현하는 가장 좋은 방법이 무엇인지 궁금합니다.

인덱스와 같이 저장해야 할 정보와 값 수와 마지막으로 반복되는 실제 숫자를 저장하는 좋은 방법을 생각할 수 없습니다.

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




    }

}



}
도움이 되었습니까?

해결책

다음과 같이 선언된 2D ArrayList를 사용할 수 있습니다.

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

그런 다음 프로세스가 끝날 때 추가할 2개의 ArrayList를 선언합니다.

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

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

그 다음에

1) 요소가 이전과 동일한지 확인하면서 목록을 반복합니다.

그렇다면 끝까지 계속하거나 다른 요소가 발견될 때까지 계속 진행합니다. 이때 'length'라는 ArrayList에 이전 동일한 요소의 수와 'value'라는 요소의 값을 저장합니다.가장 긴 현재 하위 시퀀스의 길이를 포함하는 길이의 요소 인덱스를 저장하는 int(인덱스라고 함)를 갖습니다. 이는 구성 요소의 값을 포함하는 요소의 인덱스와 동일합니다. 값에 저장되었습니다)).

그렇지 않은 경우 다음 요소로 이동합니다.

2) 필요한 경우 색인을 업데이트하여 프로세스를 반복합니다(예:더 긴 하위 시퀀스가 ​​발견된 경우).

마지막에 결과에 길이와 값을 추가하려면 다음을 수행하십시오. result.add(length); 그리고 result.add(value);

필요한 모든 정보를 보유하는 하나의 객체를 반환하려면 int 'index'를 Integer로 래핑하고 이를 'length'라는 ArrayList의 끝에 추가하거나 새 ArrayList에 넣고 해당 ArrayList를 추가할 수도 있습니다. 결과적으로.

결과에 저장된 후 첫 번째 ArrayList(이 경우 'length'라는 항목)의 인덱스 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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top