传递二维数组并返回一维数组

时间:2015-05-31 00:27:37

标签: java arrays methods multidimensional-array

public class magicSquare {
    public static void main(String[] args) {
        int[][] mySquare = {{2,7,6},
                            {9,5,1},
                            {4,3,8}};

        System.out.print(columnsAreAllEqualToMagicSum(mySquare));
    }
                                           //***********************//
    public static int getSumOfColumn(int[]  /*[] array, int index*/) {
        int sum = 0;                //********//
        int[] t = getColumn(array  /*, index*/);

        for (int i = 0; i < t.length; i++) {
            sum = sum + t[i];
            System.out.print(t[i] + " ");
        }
        System.out.println();
        return sum;
    }

    public static int[] getColumn(int[][] array, int index) {
        int[] result = new int[array[1].length];
        for (int i = 0; i < array[1].length; i++) {
            result[i] = array[i][index];
        }
        return result;
    }

    public static boolean columnsAreAllEqualToMagicSum(int[][] array) {
        int arrayLength = array[1].length;
        int previousValue = 0;
        for (int i = 0; i < arrayLength; i++) {
            int value = getSumOfColumn(array, i);

            if (i != 0) {
                if (previousValue != value) {
                    return false;
                }
            }
            previousValue = value;
        }
        return true;
    }

如果取消注释所有注释,此代码可以正常工作。但我在这里要做的是将2D数组传递到getColumn方法并将其返回到一维数组中,然后传递到getSumOfColumncolumnsAreAllEqualToMagicSum然后会检查所有列是否相等15并返回true,否则false。我该怎么做?

1 个答案:

答案 0 :(得分:0)

好吧,我在你的代码中发现了很多错误:

  1. 删除您的评论。不是它们内部的代码,只有/* */

  2. 如果我是你,我不会创建一个变量来设置多维数组中第一列的长度。我会把它放在循环中:

    for(int i = 0; i&lt; array [1] .length; i ++){}

  3. 如果将2个变量传递给方法getSumOfColumn,并且在此方法的声明中只有1个参数,则它将不起作用。您还必须声明index。另外,如果你传递一个具有多维数组的变量,你不能将它声明为一个简单的数组。

  4. 如果您尝试在if语句中设置previousValue,则必须在previousValue = value语句中包含if-else,因为如果不是,则始终设置previousValue {1}},如value

  5. 如果您的号码为15,则永远不会比较。

  6. 在我看来,代码必须是这样的:

    public class magicSquare {
    
        public static void main(String[] args) {
            int[][] mySquare = {{2,7,6},
                                {9,5,1},
                                {4,3,8}};
    
            System.out.print(columnsAreAllEqualToMagicSum(mySquare));
        }
    
    
    
        public static int getSumOfColumn(int[][] array, int index) {
    
            int sum = 0;                
            int[] t = getColumn(array, index);
    
            for (int i = 0; i < t.length; i++) {
                sum = sum + t[i];
                System.out.print(t[i] + " ");
            }
            System.out.println();
            return sum;
        }
    
        public static int[] getColumn(int[][] array, int index) {
            int[] result = new int[array[1].length];
    
            for (int i = 0; i < array[0].length; i++) {
    
                result[i] = array[i][index];
            }
            return result;
        }
        public static boolean columnsAreAllEqualToMagicSum(int[][] array) {
    
            int previousValue = 15;
            boolean correct = true;
    
            for (int i = 0; i < array[1].length && correct == true; i++) {
                int value = getSumOfColumn(array, i);
    
                if (i != 0) {
                    if (previousValue != value) {
                        correct = false;
                    }
                }
            }
    
            if(correct == true){
               return true;
            }
            else{
               return false;
            }
        }
    

    如果我没有理解你的问题,我认为你想要对多维数组中每一行的所有列求和,然后比较它们,如果这个结果的数量等于15。

    我认为在双循环中执行它会更容易,一个在另一个循环中,通过所有的行和列并在那里比较它们但我认为我放在它上面的代码必须工作。

    双循环我的意思是:

    for(int i = 0; i < array[1].length; i++)
    {
      for(int j = 0; j < array[0].length; j++)
      {
        //Your code to make your sum
      }
    //Your code to compare if your sum its equals to 15
    }
    

    我希望它会对你有所帮助!