【问题标题】:Java: Finding the highest value in an arrayJava:查找数组中的最大值
【发布时间】:2009-11-27 04:54:23
【问题描述】:

由于某种原因,当我尝试仅打印一个(即 11.3)时,此代码正在为数组中的最大值打印三个值。有人可以向我解释为什么会这样吗?

谢谢。

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

        }        
    }
}

【问题讨论】:

  • Collections.max(arrayList).toInt()

标签: java arrays max


【解决方案1】:

每次找到一个高于当前最大值的数字时,它都会打印出一个数字(在您的情况下恰好发生了 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);

【讨论】:

    【解决方案2】:

    要从数组中找到最高(最大值)或最低(最小值)值,这可以为您提供正确的方向。这是从原始数组中获取最大值的示例代码。

    方法一:

    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)

    方法二:

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

    现在下面的行应该可以工作了。

    System.out.println("十二月的最大值是:" + maxValue(decMax)); 

    【讨论】:

    • 对于Java 8,方法2非常方便。
    • 这些也是正确和好的解决方案,但不是最有效的。接受的答案是在数组中找到最高元素的最有效方法。
    【解决方案3】:

    您需要在扫描完所有这些之后打印出最大

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

    【讨论】:

      【解决方案4】:

      如果您正在寻找对数组执行各种操作的最快和最简单的方法,使用 Collections 类非常有帮助(文档可从https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html 获得),操作范围包括查找最大值、最小值、排序, 倒序等。

      使用集合从数组中查找最大值的简单方法:

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

      如果您有兴趣找到最小值,类似于寻找最大值:

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

      对列表进行排序的最简单的行:

      Collections.sort(a);
      

      或者使用 Arrays 类对数组进行排序:

      Arrays.sort(decMax);
      

      但是 Arrays 类没有直接引用最大值的方法,对其排序并引用最后一个索引是最大值,但是请记住,通过上述两种方法排序具有 O(n记录 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);
        

        【讨论】:

          【解决方案6】:

          获得数组最大值的更短的解决方案:

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

          【讨论】:

            【解决方案7】:

            您的 print() 语句在 for() 循环中,它应该在之后,以便它只打印一次。按照目前的方式,每次最大值更改时都会打印一个max

            【讨论】:

              【解决方案8】:

              如果您不想使用任何 java 预定义库,那么下面是

              最简单的方法

                 public class Test {
              
                  public static void main(String[] args) {
                      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 maxx = decMax[0];
              
                      for (int i = 0; i < decMax.length; i++) {
                          if (maxx < decMax[i]) {
                              maxx = decMax[i];
                          }
                      }
                      System.out.println(maxx);
              
                  }
              }
              

              【讨论】:

                【解决方案9】:

                您可以使用接受数组并在其中找到最大值的函数。我把它做成通用的,所以它也可以接受其他数据类型

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

                【讨论】:

                  【解决方案10】:

                  你可以这样写。

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

                  【讨论】:

                    【解决方案11】:
                    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);
                    }
                    

                    【讨论】:

                      【解决方案12】:

                      您只是将第零个元素与其余元素进行比较,因此它将打印它将包含的最后一个最大值,在您的情况下,同样的问题正在发生。要比较每个元素,我们必须交换以下值:

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

                      希望对你有帮助

                      【讨论】:

                        【解决方案13】:

                        我发现的最简单的方法,支持所有安卓版本

                        Arrays.sort(series1Numbers);
                        
                        int maxSeries = Integer.parseInt(String.valueOf(series1Numbers[series1Numbers.length-1]));
                        

                        【讨论】:

                          【解决方案14】:

                          不使用集合的简单方法

                          public void findHighestNoInArray() {
                                  int[] a = {1,2,6,8,9};
                                  int large = a[0];
                                      for(int num : a) {
                                          if(large < num) {
                                              large = num;
                                          }
                                      }
                                      System.out.println("Large number is "+large+"");
                                  }
                          

                          【讨论】:

                            【解决方案15】:
                            import java.util.*;
                            class main9 //Find the smallest and 2lagest and  ascending and descending order of  elements in array//
                            {
                                public static void main(String args[])
                                {
                                    Scanner sc=new Scanner(System.in);
                                    System.out.println("Enter the array range");
                                    int no=sc.nextInt();
                                    System.out.println("Enter the array element");
                                    int a[]=new int[no];
                                    int i;
                                    for(i=0;i<no;i++)
                                    {
                                        a[i]=sc.nextInt();
                                    }
                                    Arrays.sort(a);
                                    int s=a[0];
                                    int l=a[a.length-1];
                                    int m=a[a.length-2];
                                    System.out.println("Smallest no is="+s);
                                    System.out.println("lagest 2 numbers are=");
                                    System.out.println(l);
                                    System.out.println(m);
                                    System.out.println("Array in ascending:");
                                    for(i=0;i<no;i++)
                                    {
                                        System.out.println(a[i]);
                                    }
                                    System.out.println("Array in descending:");
                                    for(i=a.length-1;i>=0;i--)
                                    {
                                        System.out.println(a[i]);
                                    }
                                }
                            }
                            

                            【讨论】:

                              【解决方案16】:

                              求最大数的简单方法

                                 int arr[] = {10, 11, 12, 13, 55, 18, 20};
                                  int num = arr.length;
                                  int max = 0;
                              
                                  for (int i = 0; i < num; i++) {
                                      if (arr[i] > max) {
                                          max = arr[i];
                              
                                      }
                              
                                  }
                                  System.out.println(max);
                              

                              【讨论】:

                              • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。您可以使用edit 按钮改进此答案以获得更多选票和声誉!
                              【解决方案17】:

                              如果您想从数组中找到最高值,我们有不同的方法。我将分享一些在数组中查找最高元素的好例子。

                              来源Java Program to Find Largest Element of an Array

                              方法 1:使用迭代方式

                              在本例中,我们将获取一个 max 变量并将数组的第一个元素分配给它。现在我们将迭代数组,如果任何元素大于最大最大元素,然后将其分配给最大元素,否则进入下一次迭代。

                              int largest = arr[0];
                              for(int i = 1 ; i < arr.length; i++){
                              if( largest < arr[i]){
                              largest = arr[i];
                              }
                              }
                              

                              方法 2:使用 Java8 流

                              我们可以使用stream的max方法得到最大元素形式的数组,如下代码示例

                                      int max = Arrays.stream(arr).max().getAsInt();
                              

                              方法3:使用数组

                              在这个例子中,在数组的帮助下,我们首先按升序对数组进行排序,然后我们将返回数组中的最后一个元素

                              public static int getLargestElement(int [] arr){
                                      Arrays.sort(arr);
                                      return arr[arr.length-1];
                                  } 
                              

                              【讨论】:

                                【解决方案18】:
                                    package Loops;
                                    import java.util.Scanner;
                                    public class LargestNumber {
                                        public static void main(String[] args) {
                                            Scanner sc = new Scanner(System.in);
                                            System.out.println("How many numbers you want to enter?\n");
                                            int x = sc.nextInt();
                                            int[] data = new int[x];
                                            for (int i = 0; i < data.length; i++) {
                                                System.out.println("Enter the number " + (i + 1));
                                                data[i] = sc.nextInt();
                                            }
                                            int max = data[0];
                                            int min = data[0];
                                            int i;
                                            for (i = 1; i < data.length; i++) {
                                                if (data[i] > max) {
                                                    max = data[i];
                                                } else if (data[i] < min) {
                                                    min = data[i];
                                                }
                                            }
                                            System.out.println("The highest number in array is: " + max);
                                            System.out.println("The smallest number in array is: " + min);
                                        }
                                    }
                                

                                【讨论】:

                                • 编写一个程序来输入数字直到用户想要,最后程序应该显示输入的最大和最小数字。
                                【解决方案19】:
                                    int[] data2 = {1,10,50,70};
                                    List<Integer> testing= new ArrayList<>();
                                    for(int s=0;s<data.length;s++){
                                        testing.add(data[s]);
                                                }
                                    int t= Collections.max(testing);
                                    int mini= Collections.min(testing);
                                    System.out.println("Max is:"+t);
                                    System.out.println("Minimum  is:"+mini);
                                

                                【讨论】:

                                  【解决方案20】:
                                  function maxElement(values){
                                    var max = values[0]; // Initialize maximum element
                                    for (value of values){ //Traverse array elements from second and compare every element with curr`enter code here`ent max 
                                      if (value > max) {
                                        max = value //new maximum
                                      }
                                    }
                                    return max;
                                  }
                                  

                                  【讨论】:

                                  • 这与另一个答案相同
                                  • 这使用了一个for-of循环。
                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2016-11-12
                                  • 2012-08-14
                                  • 2016-01-14
                                  • 2016-11-02
                                  • 2014-06-26
                                  • 2016-05-25
                                  相关资源
                                  最近更新 更多