2009-11-27 62 views
17

Vì lý do nào đó mã này đang in ba giá trị cho giá trị cao nhất trong mảng khi tôi cố in chỉ một (tức là 11,3). Ai đó có thể vui lòng giải thích cho tôi tại sao nó làm điều này?Java: Tìm giá trị cao nhất trong một mảng

Cảm ơn.

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() –

Trả lời

27

Nó in ra một số mỗi lần tìm thấy số đó cao hơn số tối đa hiện tại (xảy ra ba lần trong trường hợp của bạn.) Di chuyển bản in ra ngoài vòng lặp và bạn nên làm tốt.

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

Bạn cần phải in ra max sau bạn đã quét tất cả trong số họ:

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

Bạn có in() tuyên bố của bạn trong for() vòng lặp, Nó phải là sau khi để nó chỉ in một lần. theo cách hiện tại, mỗi lần thay đổi tối đa, nó sẽ in một max.

17

Để tìm giá trị cao nhất (tối đa) hoặc thấp nhất (min) từ một mảng, điều này có thể cung cấp cho bạn hướng đi đúng. Dưới đây là một mã ví dụ để nhận được giá trị cao nhất từ ​​một mảng nguyên thủy.

Phương pháp 1:

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); 

}

Để có được giá trị thấp nhất, bạn có thể sử dụng

Collections.min(list)

Cách 2:

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

Bây giờ dòng sau nên làm việc.

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

Đối với Java 8, Phương pháp 2 là rất tiện dụng. –

+0

Cái nào là hiệu suất tốt khôn ngoan? –

+0

Đây cũng là giải pháp đúng và tốt nhưng không hiệu quả nhất. Câu trả lời được chấp nhận là ** cách hiệu quả nhất ** để tìm phần tử cao nhất trong mảng. –

4

Nếu bạn đang tìm kiếm một cách nhanh nhất và đơn giản nhất để thực hiện các hành động khác nhau liên quan đến mảng, việc sử dụng các lớp Collections là cực kỳ hữu ích (tài liệu có sẵn từ https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html), hành động dao động từ việc tìm kiếm tối đa, tối thiểu , phân loại, thứ tự ngược lại vv

Một cách đơn giản để tìm giá trị lớn nhất từ ​​mảng với việc sử dụng Bộ sưu tập:

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)); 

Nếu bạn quan tâm trong việc tìm kiếm các giá trị nhỏ nhất, tương tự như tìm m aximum:

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

Điểm mấu đơn giản nhất để sắp xếp danh sách:

Collections.sort(a); 

Hoặc cách khác việc sử dụng các lớp Mảng để sắp xếp một mảng:

Arrays.sort(decMax); 

Tuy nhiên lớp Mảng không có một phương pháp đề cập đến giá trị tối đa trực tiếp, phân loại nó và tham chiếu đến chỉ mục cuối cùng là giá trị tối đa, tuy nhiên hãy nhớ phân loại theo 2 phương thức trên có độ phức tạp của O (n log n).

5

Cùng theo đề nghị của người khác, chỉ cần nhắc đến một cách sạch để làm việc đó:

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

Một giải pháp ngắn hơn để có giá trị tối đa của mảng:

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

Bạn có thể sử dụng một hàm chấp nhận một mảng và tìm giá trị tối đa trong đó. tôi đã làm cho nó chung chung nên nó cũng có thể chấp nhận các loại dữ liệu khác

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

Bạn có thể viết như thế này.

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

Bạn chỉ so sánh yếu tố 0 với phần còn lại của các yếu tố vì vậy nó sẽ in giá trị giá trị lớn nhất cuối cùng mà nó sẽ chứa, trong trường hợp bạn, cùng một vấn đề đang xảy ra. Để so sánh từng yếu tố chúng ta phải trao đổi các giá trị như:

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); 

Hy vọng điều này sẽ giúp bạn

Các vấn đề liên quan