2009-11-27 4 views
17

어떤 이유로이 코드는 하나만 인쇄하려고 할 때 배열의 가장 높은 값에 대해 세 개의 값 (11.3)을 인쇄합니다. 누군가 이걸 왜하는지 나에게 설명해 줄 수 있니?Java : 배열에서 가장 높은 값 찾기

감사합니다.

import java.util.Scanner; 

public class Slide24 
{ 
    public static void main (String [] args) 
    { 
     Scanner in = new Scanner(System.in); 

     double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 
      8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 
      3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1}; 

     double total = 0, avgMax = 0; 

     for (int counter = 0; counter < decMax.length; counter++) 
     { 
     total += decMax[counter]; 
     } 

     avgMax = total/decMax.length; 

     System.out.printf("%s %2.2f\n", "The average maximum temperature for December was: ", avgMax); 

     //finds the highest value 
     double max = decMax[0]; 

     for (int counter = 1; counter < decMax.length; counter++) 
     { 
     if (decMax[counter] > max) 
     { 
      max = decMax[counter]; 
      System.out.println("The highest maximum for the December is: " + max); 
     } 

     }   
    } 
} 
+1

Collections.max (ArrayList에) .toInt을 (도움이됩니다

double max = decMax[0]; for (int counter = 1; counter < decMax.length; counter++){ if(max<decMax[i]){ max=decMax[i]; //swapping decMax[i]=decMax[0]; } } System.out.println("The max value is "+ max); 

희망) 자바 8 –

답변

27

현재 최대 값보다 큰 값을 찾을 때마다 번호가 인쇄됩니다 (경우에 따라 3 번 발생합니다). for 루프 외부에서 인쇄물을 이동하면 좋을 것입니다.

for (int counter = 1; counter < decMax.length; counter++) 
{ 
    if (decMax[counter] > max) 
    { 
     max = decMax[counter]; 
    } 
} 

System.out.println("The highest maximum for the December is: " + max); 
6

당신은 당신이 그들 모두 스캔 한 후 최대 를 인쇄해야합니다 당신은 for() 루프에 인쇄() 문이

for (int counter = 1; counter < decMax.length; counter++) 
{ 
    if (decMax[counter] > max) 
    { 
     max = decMax[counter]; 
     // not here: System.out.println("The highest maximum for the December is: " + max); 
    } 
} 
System.out.println("The highest maximum for the December is: " + max); 
1

을, 그것은 이후에해야한다 한 번만 인쇄됩니다. 현재는 최대 값이 변경 될 때마다 max이 인쇄됩니다.

17

배열에서 최대 (최대) 또는 최소 (최소) 값을 찾으려면 올바른 방향을 제시 할 수 있습니다. 다음은 프리미티브 배열에서 가장 높은 값을 가져 오는 예제 코드입니다.

방법 1 : 이제 다음 줄 작동합니다

public int maxValue(int array[]){ 
    int max = Arrays.stream(array).max().getAsInt(); 
    return max; 
} 

:

public int maxValue(int array[]){ 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i = 0; i < array.length; i++) { 
    list.add(array[i]); 
    } 
return Collections.max(list); 

}

가장 낮은 값을 얻으려면, 당신은

Collections.min(list)

방법 2를 사용할 수 있습니다. 당신이 배열에 관해서 다양한 작업을 수행 할 수있는 가장 빠르고 간단한 방법을 찾고 있다면

System.out.println("The highest maximum for the December is: " + maxValue(decMax));

+0

방법이 매우 편리합니다. –

+0

성능면에서 어느 것이 현명한가요? –

+0

이것들은 또한 옳고 좋은 해결책이지만 가장 효율적이지는 않습니다. 수락 된 대답은 ** 배열에서 가장 높은 원소를 찾는 가장 효율적인 ** 방법입니다. –

4

은 컬렉션 클래스의 사용이 작업은 최대, 최소를 찾는 범위 (https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html에서 사용할 문서) 매우 도움이된다 ,, 등

역순으로, 컬렉션의 사용과 배열에서 최대 값을 찾을 수있는 간단한 방법 정렬 : m을 찾는

Double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3.0, 1.1, 6.5, 5.1, -1.2, -5.1, 2.0, 5.2, 2.1}; 
List<Double> a = new ArrayList<Double>(Arrays.asList(decMax)); 
System.out.println("The highest maximum for the December is: " + Collections.max(a)); 

당신이 최소값을 찾는 데 관심이 있다면, 유사한 aximum : 배열 클래스하지 않는 그러나

Arrays.sort(decMax); 

: 배열을 정렬 할

Collections.sort(a); 

또는 배열 클래스의 대안으로 사용 :

System.out.println(Collections.min(a)); 

간단한 라인이 목록을 정렬하기 최대 값을 직접적으로 참조하는 메소드를 가지고 정렬하고 마지막 인덱스를 참조하는 것이 최대 값이지만 위의 2 가지 메소드로 정렬 할 때 O (n log n)의 복잡성이 있음을 명심하십시오.같은

5

단지 그 일의 청소기 방법 언급, 다른 사람에 의해 제안 :

int max = decMax[0]; 
for(int i=1;i<decMax.length;i++) 
    max = Math.max(decMax[i],max); 
System.out.println("The Maximum value is : " + max); 
0

더 짧은 솔루션은 배열의 최대 값을 가지고 :

double max = Arrays.stream(decMax).max(Double::compareTo).get(); 
0

당신이 기능을 사용할 수를 그 배열을 받아들이고 배열에서 최대 값을 찾습니다. 내가 그것을 일반적인 당신은 다음과 같이 쓸 수 있습니다 그것은 또한 다른 데이터 유형

public static <T extends Comparable<T>> T findMax(T[] array){  
    T max = array[0]; 
    for(T data: array){ 
     if(data.compareTo(max)>0) 
      max =data;     
    } 
    return max; 
} 
0

을 받아 들일 수 있도록했다.

import java.util.Scanner; 
class BigNoArray{ 

    public static void main(String[] args){ 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter how many array element"); 
     int n=sc.nextInt(); 
     int[] ar= new int[n]; 
     System.out.println("enter "+n+" values"); 
     for(int i=0;i<ar.length;i++){ 
      ar[i]=sc.nextInt(); 
     } 
     int fbig=ar[0]; 
     int sbig=ar[1]; 
     int tbig=ar[3]; 
      for(int i=1;i<ar.length;i++){ 
       if(fbig<ar[i]){ 
        sbig=fbig; 
        fbig=ar[i]; 
       } 
       else if(sbig<ar[i]&&ar[i]!=fbig){ 
        sbig=ar[i]; 
       } 
       else if(tbig<ar[i]&&ar[i]!=fbig){ 
        tbig=ar[i]; 
       } 
      } 
     System.out.println("first big number is "+fbig); 
     System.out.println("second big number is "+sbig); 
     System.out.println("third big number is "+tbig); 
    } 
} 
0
void FindMax() 
{ 
    int lessonNum; 

    System.out.print("Enter your lesson numbers : "); 
    lessonNum = input.nextInt(); 
    int[] numbers = new int[lessonNum]; 
    for (int i = 0; i < numbers.length; i++) 
    { 
     System.out.print("Please enter " + (i + 1) + " number : "); 
     numbers[i] = input.nextInt(); 
    } 
    double max = numbers[0]; 
    for (int i = 1; i < numbers.length; i++) 
    { 
     if (numbers[i] > max) 
     { 
      max = numbers[i]; 
     } 
    } 
    System.out.println("Maximum number is : " + max); 
} 
0

그것은 당신이 경우에, 동일한 문제가 일어나고, 그것을 포함 할 값 마지막으로 가장 큰 값을 인쇄 할 수 있도록 그냥 요소의 나머지 제로 번째 요소를 비교한다. 각각의 모든 요소를 ​​비교하기 위해 우리가 같은 값을 교체해야이 당신에게