代码之家  ›  专栏  ›  技术社区  ›  Kendra Hall

返回错误数字的数组的Java最大值和最小值[已关闭]

  •  0
  • Kendra Hall  · 技术社区  · 7 年前

    我在计算数组的最大值和最小值时遇到问题。我在寻找最大和最小索引,而不是它们包含的值。我的打印结果显示最大值为7,最小值为1,但这不正确。最大值应为1,最小值应为6。我尝试在自己的for循环中生成if语句,但得到了相同的结果,我查看了其他代码,但似乎仍然无法确定我的代码出了什么问题。任何帮助都将不胜感激!

    public static void displaySales (double[] data)
    {
        double total = 0;
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
    
        for (int i = 0; i < data.length; i ++)
        {
            System.out.println("Week "+(i+1)+" total sales:"+data[i]);
            System.out.printf("Average daily sales week "+(i+1)+": %.2f\n\n", data[i]/7);
            total += data[i];
    
            if (max < data[i])
                max = i;
            if (min > data[i])
                min = i;
    
        }
        double avgWeeklySales = total/data.length;
    
        System.out.printf ("Total sales: %.2f\n", total);
        System.out.printf ("Average weekly sales: %.2f\n", avgWeeklySales);
        System.out.println ("Week with highest sales: "+ (max+1));
        System.out.println ("Week with lowest sales: "+ (min+1));
    }
    

    }

    4 回复  |  直到 7 年前
        1
  •  1
  •   Eran    7 年前

    您正在查找在 data 大堆这意味着您应该同时跟踪最小/最大索引和最小/最大值。

    int max = Integer.MIN_VALUE;
    int min = Integer.MAX_VALUE;
    int minIndex = 0;
    int maxIndex = 0;
    
    for (int i = 0; i < data.length; i ++) {
        System.out.println("Week "+(i+1)+" total sales:"+data[i]);
        System.out.printf("Average daily sales week "+(i+1)+": %.2f\n\n", data[i]/7);
        total += data[i];
    
        if (max < data[i]) {
            maxIndex = i;
            max = data[i];
        }
        if (min > data[i]) {
            minIndex = i;
            min = data[i];
        }
    }
    

    最后你应该打印 minIndex+1 maxIndex+1

        2
  •  0
  •   clinomaniac    7 年前

    我想你的意思是 data[i] 而不是 i

        if (max < data[i])
            max = data[i];
        if (min > data[i])
            min = data[i];
    
        3
  •  0
  •   LZR    7 年前

    首先,需要使用实际值(而不是索引)更新最大值和最小值,然后将索引存储在不同的变量中。此外,应颠倒比较

    if (max > data[i]) {
        max = data[i];
        maxIndex = i;
    }
    if (min < data[i]) {
        min = data[i];
        minIndex = i;
    }
    

    最后打印索引值。(也别忘了申报)

        4
  •  -1
  •   gulshan kumar    7 年前

    试试这个。

    import java.util.Scanner;
    
    public class MinMaxTest {
        static void minMax(int[] arr){
            int sum=0,min=0,max=0,ch=0;
            int[] temp = new int[arr.length];
            for(int i=0;i<arr.length;i++){
                sum=sum+arr[i];
            }
            //temp=sum-arr[0];
            for(int i=0;i<arr.length;i++){
                temp[i]=sum-arr[i];
            }
            //sort the array, 0 is minimum element index and array length - 1 index is maximum element index
            for(int i=0;i<temp.length;i++){
                for(int j=0;j<temp.length-1-i;j++){
                    if(temp[j]>temp[j+1]){
                        ch=temp[j];
                        temp[j] = temp[j+1];
                        temp[j+1] = ch;
                    }
                }
            }
            /*for(int i: temp){
                System.out.println(i);
            }*/
    
            System.out.println(temp[0]+" "+temp[arr.length-1]);
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            // TODO Auto-generated method stub
                    System.out.println("fd:" + 3/6);
                    Scanner scn = new Scanner(System.in);
                    System.out.println("enter the size of array");
                    int n = scn.nextInt();
                    int[] arr = new int[n];
                    for(int i=0;i<n;i++){
                        arr[i] = scn.nextInt();
                    }
                    minMax(arr);
                    scn.close();
    
        }
    
    }