所以我的作业要求我:
编写一个接受两个参数的方法:整数数组和表示元素数的整数。它应该返回一个二维数组,该数组将传递的一维数组划分为包含所需元素数的行。请注意,如果数组的长度不能被所需的元素数整除,则最后一行的元素数可能较少。例如,如果数组 {1,2,3,4,5,6,7,8,9}
号码呢 4
如果传递给此方法,则应返回二维数组 {{1,2,3,4},{5,6,7,8},{9}}
.
我试着用以下代码来解决这个问题:
public static int[][] convert1DTo2D(int[] a, int n) {
int columns = n;
int rows = a.length / columns;
double s = (double) a.length / (double) columns;
if (s % 2 != 0) {
rows += 1;
}
int[][] b = new int[rows][columns];
int count = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (count == a.length) break;
b[i][j] = a[count];
count++;
}
}
return b;
}
但我遇到了一个问题,当我尝试打印新数组时,这是输出:
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 0, 0, 0]]
那我怎么才能去掉最后的3个零呢?只是一个注意,我不能使用任何方法从 java.util.*
或者任何内置的方法。
4条答案
按热度按时间4zcjmb1e1#
将二维数组的初始化更改为不包含第二个维度:
new int[rows][]
. 您的数组中现在有空数组。必须初始化循环中的那些:b[i]=new int[Math.min(columns,remainingCount)];
其中remainingcount是2d数组外的数字量。kqlmhetl2#
用一维数组中的值填充二维数组(只要存在):
另请参见:如何使用一维数组中的值填充二维数组?
tvokkenx3#
在代码中添加此if条件将缩短最终数组(如果大小不正确):
8oomwypt4#
最好在方法中切换参数:
允许使用vararg。
此外,还可以迭代输入数组(单循环)而不是嵌套循环。
实施示例: