以某种方式生成 X 和 Y ID
Generating an X and Y ID in a certain way
我在尝试找到这个答案的解决方案时遇到了很多麻烦,因为很难专门搜索它。不过我会尽力解释清楚的。
目前我有以下代码:
for(int x = 0; x < 10000; x++){
for(int z = 0; z < 10000; z++){
if(!exists(x + ";" + z)){
return x + ";" + z;
}
}
}
这几乎是我想要做的,只是数字 "generate" 的方式是这样的:
0;0
0;1
0;2
0;3
...
0;9999
1;0
1;1
我希望按以下方式生成数字 "or similar",同时仍然确保每个组合都存在。
0;0
1;0
1;1
0;1
我创建了一个 image to show how the numbers should generate. It can go from bottom to left or left to bottom. (See image)
谢谢!
您似乎要查找的算法是:
for(int distanceFromCorner = 0; distanceFromCorner < 10000; distanceFromCorner++) {
for(int otherAxis = 0; otherAxis <= distanceFromCorner; otherAxis++) {
if(!exists(distanceFromCorner + ";" + otherAxis))
return distanceFromCorner + ";" + otherAxis;
if(!exists(otherAxis + ";" + distanceFromCorner))
return otherAxis + ";" + distanceFromCorner;
}
}
请注意,如果您想生成大量 ID,这(与您的原始算法一样)将比必要的慢得多。 (优化这是一个单独的问题)
int len = 3;
for (int i = 0; i < len; i++) {
for (int j = 0; j <= i; j++) //println(i+";"+j);
for (int k = i-1; k >= 0; k--) //println(k+";"+i);
}
在上面的代码中,len
用于定义正方形的长度(len
上面的 3 表示 3 x 3)。在您自己的代码中,您选择了 10000,但这对于打印值来说太大了
您想要的最简单的方法是使用两个内部循环,一个处理垂直,另一个处理水平。除此之外,只需任意选择哪个处理每个 i
迭代的角。在上面的代码中,j
循环处理极端情况
我在尝试找到这个答案的解决方案时遇到了很多麻烦,因为很难专门搜索它。不过我会尽力解释清楚的。
目前我有以下代码:
for(int x = 0; x < 10000; x++){
for(int z = 0; z < 10000; z++){
if(!exists(x + ";" + z)){
return x + ";" + z;
}
}
}
这几乎是我想要做的,只是数字 "generate" 的方式是这样的:
0;0 0;1 0;2 0;3 ... 0;9999 1;0 1;1
我希望按以下方式生成数字 "or similar",同时仍然确保每个组合都存在。
0;0
1;0
1;1
0;1
我创建了一个 image to show how the numbers should generate. It can go from bottom to left or left to bottom. (See image)
谢谢!
您似乎要查找的算法是:
for(int distanceFromCorner = 0; distanceFromCorner < 10000; distanceFromCorner++) {
for(int otherAxis = 0; otherAxis <= distanceFromCorner; otherAxis++) {
if(!exists(distanceFromCorner + ";" + otherAxis))
return distanceFromCorner + ";" + otherAxis;
if(!exists(otherAxis + ";" + distanceFromCorner))
return otherAxis + ";" + distanceFromCorner;
}
}
请注意,如果您想生成大量 ID,这(与您的原始算法一样)将比必要的慢得多。 (优化这是一个单独的问题)
int len = 3;
for (int i = 0; i < len; i++) {
for (int j = 0; j <= i; j++) //println(i+";"+j);
for (int k = i-1; k >= 0; k--) //println(k+";"+i);
}
在上面的代码中,len
用于定义正方形的长度(len
上面的 3 表示 3 x 3)。在您自己的代码中,您选择了 10000,但这对于打印值来说太大了
您想要的最简单的方法是使用两个内部循环,一个处理垂直,另一个处理水平。除此之外,只需任意选择哪个处理每个 i
迭代的角。在上面的代码中,j
循环处理极端情况