한 가지 방법은 배열이 만들어지면 배열을 정렬하고 중복 된 값이 있는지 확인하는 것입니다.
물론 짐작할 수도 있고 항목을 추가 할 때마다 전체 배열을 반복 할 수도 있지만 매우 비효율적입니다. 아래의 솔루션은 처음에는 똑같이 비효율적이지만 최적화 할 수있는 기회가 있습니다.
나는 복사하고 붙여 넣기가 아니라 배우고 싶어한다고 생각하기 때문에 의도적으로 코드를 사용하지 않습니다.
배열 values
이 채워지면 (즉, while
루프 이후에) 배열을 정렬하십시오. 이전 실습에서 배열을 정렬하는 방법을 이미 알고 있을지 모르지만 그렇지 않은 경우 bubble sort은 배우기 쉽고 성능이 최악입니다.
간단한 버블 정렬 구현에 대해서는 this answer을 참조하십시오.
function bubbleSort:
//values is your array
//length is the length of values
loop i from 0 to length - 1
loop j from i+1 to length - 1
if values[i] > values[j]
swap values[i] and values[j]
end if
end loop
end loop
end function
일단 정렬 된 배열이 있으면 루프를 통해 현재 요소가 이전 요소와 같은지 확인하십시오. 그렇다면 복제본입니다.(당신이 이미 가지고 코드)
한 최적화는 중복 제거 :
function removeDuplicates:
//values is your array
//non_duplicate_array is another array with only non duplicate values
loop from 1 to size-1 //and not from 0, because we are comparing
//an element with the previous and
//the element at 0 does not have a previous element
if values[i] == values[i-1]
//duplicate!
else
add element to non_duplicate_array.
end if
end loop
그래서 우리는이 정렬 자체가 중복 제거되도록하려면 :
012 여기
loop j from i+1 to length - 1
if values[i] > values[j]
swap values[i] and values[j]
end if
end loop
대신 값을 교환, 당신은 다른 배열에 값을 추가 할 수 있습니다, 그래서하는 동안 만이 아닌 중복 수행 :
을 3,516,
이 가장 안쪽의 종류 위의 거품 루프입니다
function bubbleSort:
//values is your array
//length is the length of values
//non_duplicate_array is another array that will eventually have
//sorted non duplicate values
loop i from 0 to length - 1
loop j from i+1 to length - 1
if values[i] != values[j]
if values[i] > values[j]
add values[j] to non_duplicate_array
else
add values[i] to non_duplicate_array
end if
end if
end loop
end loop
end function
정렬은 거품 정렬이므로 매우 중첩 된 루프이므로 매우 inefficient입니다. 하지만 이것을 merge sort 또는 빠른 정렬 인 far more efficient으로 바꿀 수 있습니다. 또한 병합 또는 빠른 정렬 알고리즘을 적용하여 중복을 제거 할 수 있습니다.
출력 배열을 정렬하는 데 문제가없는 경우에만 작동합니다. 그렇지 않으면 @ xgeorgekx의 답과 같이 무차별 적으로 강제해야합니다. 또는 Set
을 사용하십시오.
편집 :
다음은 모두가 Set
으로 필요하다 그냥 당신이 설정에 대한 권장을 많이 볼 이유를 이해할 수 있도록 :
그것 뿐이다
Set valueSet = new HashSet<Double>();
...
...
while (InputFile.hasNextDouble())
{
valueSet.add(InputFile.nextDouble());
}
. 세트에는 중복되지 않는 값만 있습니다. 그렇지만 프로그래밍을 배울 수는 없습니다 :-).
호기심 : 왜지도 나 arraylist를 사용하지 않습니까? – csmckelvey
아직 내 수업 (intro level comp sci)에서 다루지 않았으며 교수님은 가르치지 않은 재료를 사용하지 않으려 고합니다 –
인쇄하기 전에 매번 배열을 반복해야합니다. – Ben