我有数据,我正在加入一个数组,我想分配行&仅使用数组长度的2D数组的列。
例如,如果我的数组的长度为18,我如何确保2D数组的行和列为2darray[3][6]
,并确保它不是{{1} }}?
我开始一个非常简单的for循环来找到我的数组长度的因素,但我很快发现这可能太复杂了,应该有一个更简单的方法。
这就是我所做的:
[2][9]
输出:
for( int i = 11; i > 0; i-- ) {
if( 18 % i == 0 ) {
System.out.print( i + " " );
}
}
有什么想法吗?
答案 0 :(得分:0)
由于您正在寻找最方形的数组,您可以使用此处发布的循环来构建可能维度的数组,但从1维数组的长度开始以获取所有可能的值。
那时:
我将如何做到这一点:
import java.util.ArrayList;
import java.util.Arrays;
public class Sandbox {
public static void main(String[] args) {
int[] array1D = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
//int[] array1D = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int[][] array2D = to2DArray(array1D);
}
public static int[][] to2DArray(int[] array1D) {
// will contain the possible dimensions for the 2D array
ArrayList<Integer> dims = new ArrayList<>();
for (int i = 1; i <= array1D.length; i++) {
if (array1D.length % i == 0) {
dims.add(i);
}
}
System.out.println(Arrays.toString(dims.toArray(new Integer[dims.size()])));
int nbValues = dims.size();
// use a central value for the most squarish 2D array
int sizeX = dims.get(nbValues / 2);
// set up the other dimension
int sizeY;
if (nbValues % 2 == 0) {
// the 1-d array was not special, take the other central value
sizeY = dims.get(nbValues / 2 - 1);
} else {
// the 1-d array length was a perfect square, take the same value
sizeY = sizeX;
}
System.out.println("sizeX=" + sizeX + " sizeY=" + sizeY);
// create the array and fill it with data
int[][] array2D = new int[sizeX][sizeY];
copyData(array1D, array2D);
return array2D;
}
public static void copyData(int[] array1D, int[][] array2D) {
// TODO take the data from array1D and copy it into array2D
}
}