Java 用整数填充二维数组

Java 用整数填充二维数组,java,arrays,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

我想写一个函数,它应该像这样填充二维数组:

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();
    }
}
公共类数组{
公共静态void TwoDimFill(int[][]数组,int start,int inc){
数组[0][0]=开始;
for(int i=0;i对于(int y=0;yi+1和j+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];
}
for(int i=0;i

编辑:正如评论中指出的,最后一行输出是不正确的。变量i可以循环到i+1和j+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];
}
for(int i=0;i

编辑:正如评论中指出的,最后一行输出是不正确的。变量i可以循环到您正在执行的操作过多。有一个更干净、更简单、更快的解决方案有时不同的方法可以更好地解决问题

for (int i = 0; i < array.length; i++)
    for (int j = 0; j < array[i].length; j++)
        array[i][j]=((i+j)<<1)+1;
for(int i=0;i数组[i][j]=((i+j)您正在执行的操作数量过多。有一种更干净、更简单、更快的解决方案。有时,不同的方法可以更好地解决问题

for (int i = 0; i < array.length; i++)
    for (int j = 0; j < array[i].length; j++)
        array[i][j]=((i+j)<<1)+1;
for(int i=0;i数组[i][j]=((i+j)在执行循环中的最后一行之前,需要检查索引是否超出范围,并且只使内部循环迭代到
length-1
(因为Java中数组的索引开始于0,结束于小于其长度的1):

for(int i=0;i
这将产生:

13579
357911
579113
79111315
91131517

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

13579
357911
579113
79111315
900


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

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

for(int i=0;i
这将产生:

13579
357911
579113
79111315
91131517

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

13579
357911
579113
79111315
900


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

这是错误的,因为
数组[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;
    }
}
publicstaticvoidtwodimfill(int[]]array,int start,int inc){
int aux=0;
for(int i=0;i
这是错误的,因为
数组[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;
    }
}
publicstaticvoidtwodimfill(int[]]array,int start,int inc){
int aux=0;
for(int i=0;i
要做到这一点非常简单,请使用以下方法

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;
    }
}
公共类TestClass{
公共静态void main(字符串参数[]){
int[]temp=新int[5][5];
int[][]输出=fill2dim(温度,1,2);
for(int i=0;i