我的计划是将 GridPane 中的每个元素放在 JavaFX 程序上。但 javafx 实际上不是我的问题,我无法在抽象中进一步深入以创建具有以下特征的算法:
这是算法本身的一个示例,因此您不必查看不必要的 javaFX 元素。
public static void main(String[] args) {
String[] v1 = {null,"1",null,"3"};
String[] v2 = {"0","\"1",null,"3"};
String[] v3= {"4","5","6","","8","9","","11","12","13"};
int row=0, col=0, index=0;
String[] v = concat(v1, v3);
for(String s: v){
if(s != null && !s.isEmpty()){
if(index<3){
if(col<2){
col++;
index++;
}
else{
col=0;
row++;
System.out.println("");
}
//System.out.println("index="+index);
System.out.print(" "+s);
}
}
}
v1、v3 的期望输出是:
1 3 6
4 5 8
11 12 13
v2、v3 的期望输出是:
0 1 5 12
3 4 6 13
8 9 11
如您所见:目标是从左上角的方 block 开始,并在必要时扩展该方 block ,同时不放置可能位于串联数组中的任何 null 或空
项。
我的代码在前 4 个方面运行良好,但我真的想不出我应该如何以通用方式扩展它。如何为此类任务编写通用算法?
编辑澄清: 使用放置元素的数量放置模式应该是这样的:
1 2 5 10
3 4 6 11
7 8 9
最佳答案
这是我根据对您的问题的理解编写的一些 Python 代码。希望您能够翻译它。
主要思想如下:如果您完成了一个正方形,请从上到下填充最右边的部分,然后从左到右填充底部。
from pprint import pprint
t = range(1,92)
n = len(t)
s = int(n**.5+1)
mat = [[None]*s for _ in range(s)]
i, j = 0, 0
k = 0
st = "right"
while k<n:
mat[i][j] = t[k]
k += 1
if i==j and st=="right":
i = 0
j += 1
st = "down"
elif st == "right":
j += 1
elif i+1==j and st=="down":
i += 1
j = 0
st = "right"
else:
i += 1
pprint(mat)
关于java - 将单元格放置在网格(表)中的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24008484/