2016-07-11 2 views
0

기본 자바 프로그램에서 네 개의 복식 집합에서 최대 및 최소 수를 반환하는 클래스의 두 가지 메서드를 정의했습니다. value 매개 변수는 for 루프에서 가져온 다음 대기중인 min 또는 max 매개 변수와 비교됩니다. 그러나 출력이 정확하지 않아서 이유를 찾을 수없는 것 같습니다. 나는 어딘가에서 논리 오류를 만들었다는 것을 안다.세트에서 최대 또는 최소 더블을 어떻게 찾을 수 있습니까?

는 두 methods-

//calculate the minimum 
public double calcMin(double value, double min) 
{ 
    if (min < value) 
    { 
     min = value; 
    } 
    return value; 
} 

//calculate the maximum 
public double calcMax(double value, double max) 
{ 
    if (max < value) 
    { 
     max = value; 
    } 
    return max; 
} 

는 루프 인

for (int i = 0; i < fillups.length; i ++) 
    { 
     distance[i] = fillups[i].calcDistance(); 
     milesPerGallon[i] = fillups[i].calcMPG(distance[i]); 
     cost[i] = fillups[i].calcTotalCost(); 
     minimum = fillups[i].calcMin(distance[i], minimum); 
     maximum = fillups[i].calcMax(distance[i], maximum); 
     minMPG = fillups[i].calcMin(milesPerGallon[i], minMPG); 
     maxMPG = fillups[i].calcMax(milesPerGallon[i], maxMPG); 
     minPrice = fillups[i].calcMin(price[i], minPrice); 
     maxPrice = fillups[i].calcMax(price[i], maxPrice); 
     fillups[i].printResults(i, day[i], distance[i], cost[i], milesPerGallon[i]); 
    } 

위한 calcMax 방법은 작동하는 것 같다,하지만 calcMin하지 않습니다. Double.MAX_VALUE 및 Double.MIN_VALUE 상수를 사용하여 작업을 수행하는 방법이있을 수 있습니다.

+3

대소 문자가 구분되어야 할 때 각 사례마다 동일한 표현식을 사용하는 것 같습니다. – chrylis

+1

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#min-double-double- –

+0

모두에게 감사드립니다. 나는 그것을 고칠 수 있었고 당신의 제안과 예를 가지고 계속 나아갈 수있었습니다. –

답변

0

첫째, 당신의 두 가지 방법을 반복합니다 :

//calculate the minimum 
public double calcMin(double value, double min) 
{ 
    if (min < value) 
    { 
     min = value; 
    } 
    return value; 
} 

//calculate the maximum 
public double calcMax(double value, double max) 
{ 
    if (max < value) 
    { 
     max = value; 
    } 
    return max; 
} 

당신은 당신이 calcMax을 위해 할 당신이 calcMin에 대해 같은 논리를 사용하는 것이 보이나요? <calcMin으로 바꾸고 >으로 바꾸면 올바르게 작동합니다.

주어진 값이 현재 알려진 최소값보다 작 으면보다 작은 값을 검색하면 더 작은 값을 검색합니다. 시작 부분에 Double.MAX_VALUE으로 시작하여 최소으로 시작할 수 있습니다. 마찬가지로 가장 잘 알려진대로 Double.MIN_VALUE을 사용할 수 있습니다. 최대.

더 작고 훨씬 컴팩트 한 방법은 Math.min(double, double) (및 최대)을 사용하는 것입니다. 메서드 자체가 쓸모없는 작업을 수행하기 때문에 메서드 내에 min = value을 할당 할 필요가 없으며이 메서드의 범위를 벗어나면 minvalue이 삭제됩니다. 당신은 단순히이 작업을 수행 할 수 있습니다 : 당신이 Collections.min(Set)를 사용할 수 있습니다

public double calcMin(double value, double min) { 
    if (min < value) { 
     return min; 
    } else { 
     return value; 
    } 
} 

Set에서 가장 작은 값을 찾기위한. 그러나이 방법은 전체 집합을 검색해야한다는 점에 유의하십시오. 우선 좋은 정렬 알고리즘을 사용하는 것이 더 나을 수도 있습니다. 또한 Set에는 정의마다 순서가 없으며 List은 정렬 가능합니다.

글쎄, 나는 생각 해낸 것 같아. 건배.

+2

저는 Java에 능숙하지는 않지만 가치로 전달되는 인수가 아닙니다. 그렇다면 'min'을 변경하면 부작용 (즉, 함수 외부)이 발생하지 않습니다. 즉,'calcMin (v, minimum);은'minimum'을 변경하지 않으므로 함수는 전혀 영향을 미치지 않습니다. 물론'calcMax'와 동일합니다. –

+0

맞습니다. 메소드의 범위를 벗어나면 변수가 삭제됩니다. 나는 그의 방법을 고치기 위해 이것을 썼다. 그러나 나는 이것에 대해서도 썼다. – Zabuza

+0

'calcMin'과'calcMax'의 주된 목표는 최소값과 최대 값을 필요하다면 변경하는 것이라고 생각합니다. 그들은 그렇게하지 않기 때문에'value '를 직접 할당 할 수 있습니다.그러나 '최소'와 '최대'는 결코 변하지 않을 것입니다. –

관련 문제