我在使用Java循环创建多个数组时遇到问题。我要做的是创建一组数组,以便每个后面的数组中有3个数字,所有数字都是连续的。只是为了澄清,我需要得到的是一组,比方说30个数组,所以它看起来像这样:
[1,2,3]
[4,5,6,7,8,9]
[10,11,12,13,14,15,16,17,18]
[19,20,21,22,23,24,25,26,27,28,29,30]
....
等等。任何帮助非常感谢!
答案 0 :(得分:1)
要做到这一点,你需要跟踪三件事:(1)你已经创建了多少个阵列(所以你可以在30点停止); (2)你所依赖的数组长度(所以你可以用正确的长度创建下一个数组); (3)你要使用的整数值(所以你可以使用正确的值填充下一个数组)。
以这种方式:
private Set<int[]> createArrays() {
final Set<int[]> arrays = new HashSet<int[]>();
int arrayLength = 3;
int value = 1;
for (int arrayNum = 0; arrayNum < 30; ++arrayNum) {
final int[] array = new int[arrayLength];
for (int j = 0; j < array.length; ++j) {
array[j] = value;
++value;
}
arrays.add(array);
arrayLength += 3;
}
return arrays;
}
答案 1 :(得分:1)
我不认为你可以&#34;创造&#34; java中的数组,但是你可以创建一个数组数组,所以输出看起来像这样:
[[1,2,3],[4,5,6,7,8,9],[10,11,12,13...]...]
你可以通过使用两个for-loops
非常简洁地完成这项工作==================
int arrays[][] = new int[30][];
for (int j = 0; j < 30; j++){
for (int i = 0; i < (j++)*3; i++){
arrays[j][i] = (i++)+j*3;
}
}
第一个for循环告诉我们,通过变量j,我们当前正在向哪个数组添加项目。第二个for循环告诉我们要添加的项目,并将正确的项目添加到该位置。
您必须记住的是j++
表示j + 1
。
我已经使用了一些简单的(好吧,我说简单但是......)数学来每次生成正确的项目:
[1,2,3]
这里,j为0,我们看到第一项是一项。在第一项,我也等于0,所以我们可以说,在这里,每个项目等于i + 1
或i++
。
但是,在下一个数组中,
[4,5,6,7,8,9]
每个项目都不等于i++
,因为i
已重置为0.但是,j=1
,所以我们可以利用这个优势来生成这次正确的元素:每个项目等于(i++)+j*3
。
此规则是否有效?
好吧,我们可以看看下一个,其中j是2:
[10,11,12,13,14...]
i = 0,j = 2和10 =(0 + 1)+ 2 * 3,所以它仍然遵循我们的规则。
我是如何正确生成每个元素的。
int arrays[][] = new int[30][];
for (int j = 0; j < 30; j++){
for (int i = 0; i < (j++)*3; i++){
arrays[j][i] = (i++)+j*3;
}
}
有效。
答案 2 :(得分:1)
你需要这样的东西吗?
int size = 3;
int values = 1;
for (int i = 0; i < size; i = i + 3) {
int[] arr = new int[size];
for (int j = 0; j < size; j++) {
arr[j] = values;
values++;
}
size += 3;
int count = 0;
for (int j : arr) { // for display
++count;
System.out.print(j);
if (count != arr.length) {
System.out.print(" , ");
}
}
System.out.println();
if (i > 6) { // to put an end to endless creation of arrays
break;
}
}
答案 3 :(得分:0)
你必须使用双循环。第一个循环将迭代您的数组,第二个循环将其内容。
Sor第一个必须从0迭代到30.第二个不太容易写。你必须记住你最后一次停止的位置以及你在最后一次停留的物品数量。最后,它看起来像这样:
int base = 1;
int size = 3;
int arrays[][] = new int[30][];
for(int i = 0; i < 30; i++) {
arrays[i] = new int[size];
for(int j = 0; j < size; j++) {
arrays[i][j] = base;
base++;
}
size += 3;
}