多维数组列交换

时间:2014-11-04 12:35:18

标签: java multidimensional-array

在确定多维数组的特定列中的元素不是数字之后,我正在考虑交换这个多维数组的两列。

基本上我想在确定第6列中的元素是否为数字之后将第4列的内容与第6列中的内容交换,如果第6列中的元素不是数字,则创建新数组并开始插入旧数组内容新数组但是一旦列到达旧数组的第4列,它就会将此元素放在新数组的第6列中,反之亦然。

以下是我对上述事项的尝试。我已经能够成功识别我的第6列中的元素是否为数字。我现在对于将第4列中的元素与6中的元素进行交换背后的逻辑存在疑问。

//!<
public String[][] sortedByDateUsageStatsData(String[][] unsortedUsageStatsData) {
    System.out.println("\nbtnUsageStats - sortedByDateUsageStatsData(String[][] unsortedUsageStatsData)");

    for (int row = 0; row < unsortedUsageStatsData.length; row++) {
        for (int col = 0; col < 7; col++) {
            //System.out.println("unsortedUsageStatsData[" + row + "][" + col + "] => " + unsortedUsageStatsData[row][col]);
        }

        // Check if content in return code column i.e. column 6 is number or a string.
        // If a string then swap column 4 content with column 6 and pass this array with swapped columns as the final array
        if(!isNumericString(unsortedUsageStatsData[0][6])) {
            //System.out.println("unsortedUsageStatsData[0][6] is NOT a number i.e. " + unsortedUsageStatsData[0][6]);

            break;
        }

        System.out.println("\n");
    }

    System.out.println("\nExited for loop as unsortedUsageStatsData[0][6] is NOT a number\n");

    sortedUsageStatsData = new String[unsortedUsageStatsData.length][7];

    for (int row = 0; row < unsortedUsageStatsData.length; row++) {
        for (int col = 0; col < 7; col++) {
            //System.out.println("\nBefore swap unsortedUsageStatsData[" + row + "][" + col + "] => " + unsortedUsageStatsData[row][col]);

            sortedUsageStatsData[row][col] = unsortedUsageStatsData[row][col];

            if(col == 4) {
                System.out.println("\nBefore swap sortedUsageStatsData[" + row + "][6] => " + unsortedUsageStatsData[row][6]);                      
                sortedUsageStatsData[row][6] = unsortedUsageStatsData[row][4];
                System.out.println("\nAfter swap sortedUsageStatsData[" + row + "][6] => " + unsortedUsageStatsData[row][6]);                       

                sortedUsageStatsData[row][4] = unsortedUsageStatsData[row][6];
                System.out.println("\nAfter swap sortedUsageStatsData[" + row + "][4] => " + unsortedUsageStatsData[row][4]);                       
            }

            System.out.println("\nAfter swap sortedUsageStatsData[" + row + "][" + col + "] => " + unsortedUsageStatsData[row][col]);
        }

        System.out.println("\n");

    }

    return sortedUsageStatsData;
}

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您的循环存在问题。在col == 6的迭代中,您覆盖之前已设置的sortedUsageStatsData[row][6]的值(当col为4时)。

有几种方法可以改变这种情况,我会说出两个:

  1. 仅从0到5迭代:for (int col = 0; col < 6; col++)

  2. 在相应的迭代中设置第4列和第6列的值:

        if(col == 4) {
            sortedUsageStatsData[row][4] = unsortedUsageStatsData[row][6];
        } else if (col == 6) {
            sortedUsageStatsData[row][6] = unsortedUsageStatsData[row][4];
        }