2013-12-16 8 views
2

정수 배열과 프로그램에서 6 개의 요소가 있어야하고 배열의 최상위 요소와 최하위 요소를 찾은 다음 두 요소를 생략하고 남은 네 가지 요소에 대한 평균. 지금까지 내 프로그램은 그 배열에서 가장 낮은 수와 가장 높은 수를 찾아 낼 수 있었지만 생략 할 수는 없었습니다. 그러나 루프의 결과를 변수에 저장하여 평균을 계산할 수있는 것 같습니다. 코드는for 루프에서 변수에 결과를 저장하십시오.

int bucky[] = { 4, 6, 8, 19, 199, 400 }; 
int hello = 0; 
int max = 0; 

for (int i = 0; i < bucky.length; i++) { 
    if (bucky[i] > max) { 
     max = bucky[i]; 
    } 
} 
System.out.println("Max number is " + max); 

int min = 0; 
int j = 1; 
for (int i = 0; i < bucky.length; i++) { 
    if (bucky[i] < bucky[j]) { 
     min = bucky[i]; 
     j = i; 
    } 
} 
System.out.println("min number is " + min); 

System.out.print("{"); 
for (int i = 0; i < bucky.length; i++) { 
    if (bucky[i] != max) { 
     if (bucky[i] != min) { 
      System.out.print(" " + bucky[i]); 
     } 
    } 
} 
System.out.print("}"); 

입니다. 지금까지는 {6 8 19 199}을 출력합니다. 변수에 저장하고 평균을 계산할 수 있기를 원합니다. 어떤 도움을 주시면 감사하겠습니다.

+1

배열을 합치면 (최소/최대를 찾을 때) 합계에서 최소/최대를 뺀 다음 평균값을 계산할 수 있습니까? – MadProgrammer

답변

3

다음은 사용자가 원하는대로 달성 할 수있는 간단한 프로그램입니다.

모든 요소가 동일한 값을 가질 경우 어떻게해야합니까?

int[] input = {0,1,2,3,4,5}; 

int max = input[0]; 
int min = input[0]; 
int sum = 0; 

for(int i : input){ 
    sum += i; 
    if(i < min){ 
     min = i; 
    }else if(i > max){ 
     max = i; 
    } 
} 

System.out.println("sum for input is : " + sum); 
System.out.println("highest value element is : " + max); 
System.out.println("lowest value element is : " + min); 
System.out.println("sum excluding extreme elements is : " + (sum - min -max)); 

// have cast the result as a float as i dont know if average should be truncated or not 
System.out.println("average excluding extreme elements is : " + ((float)(sum - min -max)/(input.length-2))); 
0
int sum=0; 
for (int i=0 ;i< arr.length;i++) { 
    if(arr[i]!=max && arr[i]!=min) { 
    sum=sum+arr[i]; 
    } 
} 

int average=sum/(arr.length-2) 
+0

문제는 배열에 {1, 1, 4, 6, 7, 9, 9}와 같은 최대 또는 최소 2 배의 시간이있는 경우 둘 다 제거한다는 것입니다 (길이는 여전히 나눕니다. -2). 그리고 코드가 최소/최대를 찾는 문제를 해결하지 못합니다. –

0

당신은 거기 90 %입니다. 옳은 방향으로 조금 움직여주세요.

당신은 이미 (중첩 if의 압축 재 작성)이 문으로 최고와 최저의 결과를 필터링하는 방법을 알고 : 그런데

for(int i=0;i<bucky.length; i++){ 
    if(bucky[i] != max && bucky[i] !=min) { 
     // implementation 
    } 
} 

, 그것은 De Morgan's Law에이 같은 감사를 다시 작성할 수 있습니다. 이것은 당신을 위해 더 간단하게 읽을 수 있습니다 : 어려운 부분이었다

for(int i=0;i<bucky.length; i++){ 
    if(!(bucky[i] == max || bucky[i] ==min)) { 
     // implementation 
    } 
} 

"bucky[i]의 값도 최대도 분 ...이". 당신이 지금 필요한 것은 :

  • 카운터는 당신이 실제로 가 추가 얼마나 많은 값을 알 수 있습니다. 뭔가 같은 adjustedTotal. 숫자가 최소 또는 최대 값이 아닌 경우에만이 카운터에 추가 할 수 있습니다.

  • sum 변수가 적절하게 초기화되고 bucky[i]의 값이 bucky[i] != max && bucky[i] != min이되도록 적절히 초기화합니다.

+0

문제는 만약 여러분이 {1, 1, 4, 6, 7, 9, 9}와 같이 어레이의 최대 또는 최소 두 배를 가지고 있다면, 둘 다 제거 할 것입니다. –

0

당신은 위에서 언급 한 마코토처럼라는 변수 을 정의 할 수 있습니다.

또한 최소을 계산하는 코드에 문제가 있음을 지적하고자합니다.

int bucky[] = { 6, 4, 8, 19, 400,199 }; 

아래의 코드를 사용 : 여기

은 일례이며,

다음과 같이 INT [] 배열은 가정 분간 값 될지
int min = 0; 
    int j = 1; 
    for (int i = 0; i < bucky.length; i++) { 
     if (bucky[i] < bucky[j]) { 
      min = bucky[i]; 
      j = i; 
     } 
    } 
    System.out.println("min number is " + min); 

?

입니다. 잘못된 것입니다.

int min = bucky[0]; 
    //int j = 1; 
    for (int i = 1; i < bucky.length; i++) { 
     if (bucky[i] < min) { 
      min = bucky[i]; 
     } 
    } 
    System.out.println("min number is " + min); 

몇 가지 변화를 확인하고 이동 : 여기

You can first specify the first element in array as min, and then compare it with remaining values. If any value is smaller than min, then change the value for min.

은 예입니다. :)

1
public static void main(String args []){ 
    int bucky [] = new int [] {4, 6, 8, 19, 199, 400}; 
    int max = bucky[0]; 
    int min = bucky[0]; 
    int sum = 0; 
    for(int i = 0; i<bucky.length; i++){ 

     if(min > bucky[i]){ 
      min = bucky[i]; 
     } 
     else if(max < bucky[i]){ 
      max = bucky[i]; 
     } 
     sum += bucky[i]; 
    } 
    sum -= (min + max); 
    System.out.println("Max is " + max); 
    System.out.println("Min is " + min); 
    System.out.println("Sum is " + sum); 
    System.out.println("Average is " + sum/(bucky.length-2)); 

} 
1
, 이는 초기에 저장 첫 min의 배열 요소 maxsum을 다음과 같이 먼저 소자의 어레이를 이송 시작 minmax 값을 결정 arrays in Java를 사용하여 개발 될 수

작은 프로그램 요소를 배열의 input[i]이 가리키는 현재 요소와 비교하여 비교합니다. 또한 모든 요소의 합계를 얻으려면 sum 변수에 항상 input[i]을 추가하십시오. min, maxsum 값 요소를 계산 한 후; avgsum에서 minmax을 뺀 값으로 나눈 다음 결과 값을 length - 2으로 나눕니다.

class ComputeAvg 
{ 
    public static void main (String[] a) 
    { 
    int[] input = {10,11,12,13,14,15}; 
    int min, max, sum, avg; 
    min = max = sum = input[0]; 
    int length = input.length; 
    for (int i = 1; i < length; i++) 
    { 
     if (min > input[i]) 
     min = input[i]; 
     else if (max < input[i]) 
     max = input[i]; 
     sum += input[i]; 
    } 
    avg = (sum - min - max)/(length - 2); 

    System.out.println("sum for input is : " + sum); 
    System.out.println("highest value element is : " + max); 
    System.out.println("lowest value element is : " + min); 
    System.out.println("sum excluding min and max value elements is : " + (sum - min - max)); 
    System.out.println("Average after excluding min and max value elements is : " + avg); 
    } 
} 
OUTPUT 
====== 
sum for input is : 75 
highest value element is : 15 
lowest value element is : 10 
sum excluding min and max value elements is : 50 
Average after excluding min and max value elements is : 12 
관련 문제