我通过以下代码生成随机字符:
static void printRandomWhatEver(int NUMBER_OF_CHARACTER,
int NUMBER_OF_LINES,
char char1, char char2) {
int DIFFERENCE_SQUARE = 4;
char oldChar, newChar, random;
for (int i = 0; i < NUMBER_OF_CHARACTER; i++) {
random = getRandomCharacter(char1, char2);
if ((i + 1) % NUMBER_OF_LINES == 0) { // new line each new NUMBER_OF_LINE
System.out.println(random);
} else {
System.out.print(random);
}
}
}
我的getReandomCharacter: -
private static char getRandomCharacter(char ch1, char ch2) {
return (char) (ch1 + Math.random() * (ch2 - ch1 + 1));
}
一切正常,我需要的是chars
里面的方形2 * 2数字不能相等,这里是图片来解释我需要的东西。
数字 4 位于同一个方格: -
**
**
如何防止数字在方块的一部分中相等?
提前致谢。
答案 0 :(得分:0)
只需存储输出的最后一行,并将位置N
的数字与数字last_line[N-1]
,last_line[N]
和last_line[N+1]
进行比较。处理N-1
和N+1
的数组边界。
但是你应该意识到你以这种方式降低了随机数发生器的强度。对于人类而言,它很可能看起来更随机而且#34;但是。
但是人类可能会认识到更多的模式,而不是随机的#34;连续数字:
154
298
364
答案 1 :(得分:0)
为了避免重复,你最好不要随意洗牌而不是随意挑选。您将不得不重复选择不同的数字组来进行随机播放以避免重复。
首先,从[0..9]中选择四位数并将其随机播放:
0 1
2 3
从左到右工作,接下来的两位数来自[0,2,4..9],省略了1和3:
0 1 7
2 3 8
重复此过程,一次从八个可能的数字中添加两个。
使用类似的“从七中挑选两个”过程在下一行中添加数字。您只能选择七位数字,因为在给定配置中选择“8”是危险的:
0 1 7
2 3 8
1 8
会出错,因此无法选择“8”:
0 1 7
2 3 8
1 5
安全。
一旦你离开左手边缘,你就会从六个方向挑选,因为你必须避免在上面一行中有四个数字。
ETA:使用两行过于复杂。一次生成一行,从预先混洗选择中删除任何现有的相邻数字。这将是上面一行中的3位数字加上当前行中的前一位数字,并对左右边界进行适当调整。