30

出于某种原因,当我尝试仅打印一个(即 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);
         }

        }        
    }
}
4

20 回答 20

42

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

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

方法一:

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(列表)

方法二:

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

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

System.out.println("十二月的最高最大值是:" + maxValue(decMax));
于 2015-09-18T19:41:04.160 回答
9

扫描完所有这些,您需要打印出最大值:

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);
于 2009-11-27T04:57:23.347 回答
6

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

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

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 log n) .

于 2016-05-01T04:35:36.577 回答
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);
于 2016-09-26T03:15:14.700 回答
1

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

于 2009-11-27T04:58:35.280 回答
1

具有数组最大值的较短解决方案:

double max = Arrays.stream(decMax).max(Double::compareTo).get();
于 2017-02-06T13:35:26.293 回答
1

如果您不想使用任何 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);

    }
}
于 2018-07-21T07:38:47.253 回答
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;
}
于 2017-02-07T03:11:42.550 回答
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);
    }
}
于 2017-09-23T19:58:13.560 回答
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);
}
于 2017-11-29T20:31:49.523 回答
0

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

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

希望对你有帮助

于 2018-01-28T04:18:56.470 回答
0

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

Arrays.sort(series1Numbers);

int maxSeries = Integer.parseInt(String.valueOf(series1Numbers[series1Numbers.length-1]));
于 2018-05-12T06:28:16.477 回答
0

不使用集合的简单方法

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+"");
        }
于 2018-07-18T05:39:36.707 回答
0
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]);
        }
    }
}
于 2019-06-10T04:26:08.210 回答
0

找到最大数量的简单方法

   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);
于 2021-05-06T15:20:53.603 回答
0

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

资料来源查找数组中最大元素的 Java 程序

方法1:使用迭代方式

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

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

方法 2:使用 Java8 流

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

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

方法 3:使用数组

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

public static int getLargestElement(int [] arr){
        Arrays.sort(arr);
        return arr[arr.length-1];
    } 
于 2021-06-18T10:40:22.280 回答
0
    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);
        }
    }
于 2021-08-27T18:52:15.313 回答
0
    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);
于 2021-08-27T19:02:08.667 回答
-1
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;
}
于 2021-10-19T07:30:05.407 回答