【问题标题】:passing 2 dimensional array and return 1 dimensional array传递二维数组并返回一维数组
【发布时间】:2015-05-31 00:27:36
【问题描述】:
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;
    }

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

【问题讨论】:

  • edit 解释为什么您不能取消注释该代码,以及对列求和的具体挑战是什么,以及您是否尝试使用getColumn展平整个数组或从中选择一列。感谢您提高问题的参考价值并使其更易于回答!

标签: java arrays methods multidimensional-array


【解决方案1】:

嗯,我看到你的代码中有很多错误:

  1. 删除您的 cmets。不是它们里面的代码,只是/* */

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

    for (int i = 0; i

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

  4. 1234563 .
  5. 如果你的号码是 15,你永远不会比较。

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

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
}

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多