用整数java填充二维数组

时间:2014-01-02 13:26:01

标签: java arrays

我想编写一个应该填充二维数组的函数:

1 - 3 - 5 - 7 - 9
3 - 5 - 7 - 9 - 11
5 - 7 - 9 - 11 - 13
7 - 9 - 11 - 13 - 15
9 - 11 - 13 - 15 - 17

这就是我能想到的......按照我的逻辑它应该有效,但显然我犯了一些错误:

public class Array {

public static void TwoDimFill(int[] [] array, int start, int inc){
    array[0] [0] = start;

    for (int i = 0; i < array.length; i++){
        for (int j = 0; j < array[i].length; j++){enter code here
            array[i][j+1] = array[i][j] + inc;
        }
        array [i+1][0] = array[0][i+1];
    }
}

public static void main(String[] args){

    int[] [] b = new int[5] [5];
    TwoDimFill(b, 1, 2);

    for (int x = 0; x < b.length; x++){
        for (int y = 0; y<b[x].length; y++){
            TextIO.put(b[x][y]+"\t");
        }
        TextIO.putln();
    }
}

顺便说一下:这个TextIO.class是我们用来打印的东西,可以与system.out ...比较...

编辑:已回复!非常感谢你们,你们真棒!

5 个答案:

答案 0 :(得分:3)

i + 1和j + 1将超出范围,因为你循环直到&lt;长度。将其更改为&lt;长度-1。

for (int i = 0; i < array.length; i++){
    for (int j = 0; j < array[i].length -1; j++){
        array[i][j+1] = array[i][j] + inc;
    }
    if (i < array.length -1)
        array [i+1][0] = array[0][i+1];
}

编辑:正如评论中所指出的,最后一行输出不正确。变量i可以循环直到&lt;长度,但必须验证索引不会超出范围的最后一行。更正了上面的代码。

答案 1 :(得分:1)

您正在进行的操作数量过多。有一个更清洁,更简单,更快速的解决方案。有时,不同的方法可以更好地解决问题。

for (int i = 0; i < array.length; i++)
    for (int j = 0; j < array[i].length; j++)
        array[i][j]=((i+j)<<1)+1;

答案 2 :(得分:0)

在执行循环中的最后一行之前,您需要检查索引是否超出范围,以及仅使内部循环迭代到length-1(因为Java中的数组索引从0开始,以低于其长度的1结束):

for(int i = 0; i < array.length; i++) {
        for(int j = 0; j < array[i].length - 1; j++) {
            array[i][j + 1] = array[i][j] + inc;
        }
        if(i + 1 < array.length) {
            array[i + 1][0] = array[0][i + 1];
        }
}

这会产生:

  

1 3 5 7 9
  3 5 7 9 11
  5 7 9 11 13
  7 9 11 13 15
  9 11 13 15 17

请注意,简单地将外部循环剪切到array.length-1不起作用(因为在这种情况下,您仍然希望循环的第一部分执行),您最终会得到以下结果:

  

1 3 5 7 9
  3 5 7 9 11
  5 7 9 11 13
  7 9 11 13 15
   9 0 0 0 0

Bolding是我的,注意最后一行显然不正确。

答案 3 :(得分:0)

由于array[i][j+1],这是错误的。如果j是最后一个位置j+1不存在。你可以试试这个:

public static void TwoDimFill(int[] [] array, int start, int inc){
    int aux = 0;

    for(int i = 0; i < array.length; i++) {
        aux = start;
        for(int j = 0; j < array[i].length; j++) {
            array[i][j] = aux;
            aux += inc;
        }
        start += inc;
    }
}

答案 4 :(得分:0)

您可以非常简单地使用以下

public class TestClass {
    public static void main(String args[]) {
        int[][] temp = new int[5][5];
        int[][] output = fill2dim(temp,1,2);
        for (int i = 0; i < output.length; i++) {
            System.out.println(java.util.Arrays.toString(output[i]));
        }
    }

    public static int[][] fill2dim(int[][] arr, int start, int inc) {
        int[][] output = new int[arr.length][arr[0].length];
        for (int i = 0;i<arr.length;i++) {
            for (int j = i;j<arr[0].length;j++) {
                output[i][j] = (i+j)*inc+start;
                output[j][i] = (i+j)*inc+start;
            }
        }
        return output;
    }
}

你可以通过考虑上三角矩阵来删除一些循环,因为下三角矩阵将是对角线上三角形的反射