Java 用整数填充二维数组
我想写一个函数,它应该像这样填充二维数组: 1-3-5-7-9Java 用整数填充二维数组,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
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