首页 > 解决方案 > 如何在 2D Arraylist 中找到最大值/秒?

问题描述

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

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

这些是二维数组的片段及其查找最大值的相应方法:

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("— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —&quot;);
}

现在,我已经将 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仍执行相同功能的同时利用数据?

标签: javaarraysarraylist

解决方案


如果您不想重写该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);

推荐阅读