以某种方式生成 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 循环处理极端情况