有没有更好的方法来获取一列中所有元素的最小值,尤其是在java中的二维数组中?

f45qwnt8  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(76)

我正在为AP CSA编写一个Java程序,它从一个二维数组的列中获取最大值,用来确定并打印出品牌的哪个区域最受欢迎/或销售额最高;它还获取最小值,用来确定品牌的哪个区域销售额最低。
我已经创建了两个一维数组,一个是为5个运动鞋品牌出售,另一个是为四个地区/地点,他们出售。

String[] brands = { "ACTION", "DEFY", "GEL", "JETPRO", "MAGNUM"

        };

        String[] districts =

                {

                        "North", "West", "South", "East" };

然后,我创建了一个二维数组,其中包含以下数字**,对应于**:

  • 每行五个 * 运动鞋品牌 *
  • 以及每列中的 * 位置 *
int[][] sales = { 
                
                { 17, 57, 35, 48, 31 },
                { 35, 36, 53, 78, 76 }, 
                { 55, 56, 96, 44, 56 }, 
                { 35, 44, 34, 43, 44 }

        };

为了找到上面提到的最大值和最小值,我必须做一个嵌套的for循环来遍历二维数组,逐行而不是逐列,根据运动鞋销售的位置/区域来检查值,我有两个变量来保存最大值和最小值以及它们的索引,这就是问题开始出现的地方。
一开始,我把max和min设置为从2d数组的第一个元素开始,并根据if语句进行更改,索引从0开始。
if语句检查每列中是否有元素小于min或大于max,如果有,则将列表中的特定元素设置为min/max,并且maxIndex和minIndex(找到min/max的位置)将相应地更新。
它对最大值工作得很好,但是在超过数千次失败的尝试中,检查最小值的if语句从来没有工作过。
下面是完整的代码,包括起始变量和for循环:

int max = sales[0][0];
        int min = sales[0][0];
        int minIndex = 0;
        int maxIndex = 0;
        for (int col = 0; col < sales[0].length; col++) {
            for (int dist = 0; dist < sales.length-1; dist++) {
                
                min = sales[dist][col];
                // if this element is larger than any other element
                if(sales[dist+1][col]<min) {
                    min = sales[dist][col];
                    minIndex = dist;
                    System.out.print("Min value: " + sales[minIndex][col] + "\n");
                }
                
                
                if(max<sales[dist][col]) {
                    
                    maxIndex = dist;
                    max = sales[dist][col];
                    System.out.print("Max value: " + max + "\n");
                }
                
                
                

            }
            
            System.out.println();
            System.out.println(brands[col]);
            System.out.println("Most popular: " + districts[maxIndex]);
            System.out.println("Least popular: " + districts[minIndex]);

            minIndex = 0;
            max = sales[0][0];
        }

上千次失败的尝试都没有解决我的if语句问题,该语句用于检查列中的最小值,既然我不能给你上千个例子,我将展示我的第一次尝试。

  • 我使用了线性搜索技术,这是搜索小于目标元素(在本例中为sales [0][0])的值的最简单方法。
  • 如果任何值小于该特定元素,则最小值将被设置为该元素,并且循环将相应地运行。
  • 它看起来是这样的:
if(sales[dist][col]<min) {
        
                    minIndex = dist;
                    min = sales[dist][col];
                }

我希望每次运行内部for循环时,它都会相应地改变min值,然而,我尝试了很多不同的方法,但都无济于事。
这是我第二次尝试修复,但最终失败了:(要查看for循环和其他代码,请查看问题详细信息部分,我在那里对所发生的事情进行了全面概述)

min = sales[dist][col];
                // if this element is larger than any other element
                if(sales[dist+1][col]<min) {
                    min = sales[dist][col];
                    minIndex = dist;
                    System.out.print("Min value: " + sales[minIndex][col] +   "\n");
                }

我以为这会起作用,但是没有返回任何结果,在我的所有尝试中,min的值在循环之前和循环完成迭代之后都停留在[0][0]。
我真的需要帮助来找到我的问题的根本原因,所以任何帮助都将不胜感激。

sdnqo3pr

sdnqo3pr1#

因为你希望每列都有一个最小值和最大值,所以你应该把变量移到外部(第一个)for循环中,并在内部循环中进行最大值/最小值检查:

public static void main(String[] args) {

    String[] brands    = { "ACTION", "DEFY", "GEL", "JETPRO", "MAGNUM"};
    String[] districts = { "North", "West", "South", "East" };

    int[][] sales = {
            { 17, 57, 35, 48, 31 },
            { 35, 36, 53, 78, 76 },
            { 55, 56, 96, 44, 56 },
            { 35, 44, 34, 43, 44 }
    };

    for (int col = 0; col < sales[0].length; col++) {
        int max = sales[0][col];
        int min = sales[0][col];
        int minIndex = 0;
        int maxIndex = 0;

        for (int dist = 0; dist < sales.length; dist++) {

            if(sales[dist][col] < min) {
                min = sales[dist][col];
                minIndex = dist;
            }

            if(sales[dist][col] > max) {
                maxIndex = dist;
                max = sales[dist][col];
            }
        }

        System.out.println();
        System.out.println(brands[col]);
        System.out.println("Most popular: " + districts[maxIndex]);
        System.out.println("Least popular: " + districts[minIndex]);
    }
}

相关问题