【问题标题】:How to find maximum value/s in a 2D Arraylist?如何在 2D Arraylist 中找到最大值/秒?
【发布时间】:2021-03-27 11:54:36
【问题描述】:

我正在尝试使用 Arraylists 而不仅仅是数组来重写旧程序。该程序是 2017 年电子游戏销量前 5 名的数据库,该程序执行的方法之一是查找每个位置的最大值(总共 4 个位置:北美、欧盟、日本和其他销售额)。

(注意:总共有 5 列销售额(NA、EU、JP、Other Sales、Global Sales),我只希望该方法在前四列中找到最大值。)

这些是二维数组的sn-ps及其对应的求最大值方法:

double[][] Sales ={ {41.49,29.02,3.77,8.46,82.74},{29.08,3.58,6.81,0.77,40.24},
        {15.85,12.88,3.79,3.31,35.83},{15.75,11.01,3.28,2.96,33},
        {11.27,8.89,10.22,1,31.38} };


// maximum value
public static void hiSales(double[][] sales) {
    double max1;
    double[] max = new double[sales.length];
    for(int j=0; j<sales[0].length-1;j++) { //WILL WORK AS LONG AS IT IS SQUARE MATRIX
        
        for (int i = 0; i < sales.length; i++) {
            max1 = sales[0][j];
            if (sales[i][j] > max1) {
                max1 = sales[i][j];
            }
            if (i == sales.length - 1) {
                max[j] = max1;
            }
        }
    }
    System.out.println("\n                | HIGHEST SALES PER LOCATION |");
    System.out.println("\n | NA Sales |    | EU Sales |    | JP Sales |   "
            + "| Other Sales |   \n");
    System.out.println("— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —\n");
    System.out.print("     ");
    for(int i=0; i<max.length-1; i++) {
        System.out.print(max[i] + "\t");
        System.out.print("     ");
    } 
    System.out.println("\n");
    System.out.println("— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —");
}

现在,我已经将 2D 数组转换为 2D Arraylist,并且该方法不再起作用,这是我想解决的问题。

这是我转换的新 2D Arraylist:

ArrayList<VGSdata> sales = new ArrayList<>();
VGSdata wii = new VGSdata(41.49,29.02,3.77,8.46,82.74);
VGSdata bros = new VGSdata(29.08,3.58,6.81,0.77,40.24);
VGSdata kart = new VGSdata(15.85,12.88,3.79,3.31,35.83);
VGSdata res = new VGSdata(15.75,11.01,3.28,2.96,33);
VGSdata prb = new VGSdata(11.27,8.89,10.22,1,31.38);
    
sales.add(wii);
sales.add(bros);
sales.add(kart);
sales.add(res);
sales.add(prb);

那么.. 该方法将如何被重写,以便它利用ArrayList 中的数据同时仍执行相同的功能?

【问题讨论】:

  • 怎么不行?您需要做的就是将array[index] 更改为yourArrayList.get(index),如果您从嵌入式数组中获取,则为yourArrayList.get(index).get(otherIndex)
  • 你已经创建了一个 1D ArrayList,而不是一个 2D 的。 '2D' ArrayList 的类型是 ArrayList&lt;ArrayList&lt;Double&gt;&gt;?
  • @RIVERMAN2010 确实,我认为这只是我必须做的,但是当我做 array.get(i).get(j) 时,.get(j) 显示一个错误说“找不到符号”,它认为它是然后我必须创建一个方法。有什么解释为什么会这样吗?
  • @HenryTwist 请原谅我,我不太明白你的意思。我尝试将其重新输入为您所写的内容,但随后显示了一堆错误。我认为它已经很好了,因为我创建了一个方法来简单地显示数组列表并且它工作得很好。
  • @HenryTwist 谢谢你的建议,先生。说实话,我只是编程世界的初学者,目前我只是在学习 ArrayLists。话虽如此,我希望你能原谅我,因为我几乎不明白我如何能够应用你的建议。

标签: java arrays arraylist


【解决方案1】:

如果您不想重写hiSales 方法,那么您可以从arraylist 创建一个二维数组,然后将其传递给hiSales 方法。

double[][] dataArray = new double[sales.size()][4];
int i=0;
for(VGSdata data : sales) {
    dataArray[i][0] = data.displayNA();
    dataArray[i][1] = data.displayEU();
    dataArray[i][2] = data.displayJP();
    dataArray[i][3] = data.displayOS();

    i++;
}

// now invoke hiSales
hiSales(dataArray);

【讨论】:

  • 其实我只是想到了一个类似的方法,所以非常感谢。它可能真的有效。
  • @Viole 确保我提到的语句在正确的位置。我添加了一条评论作为对该问题的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2019-10-11
  • 2014-07-03
  • 2018-03-06
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多