在正方形中打印随机字符而不重复?

时间:2017-10-04 16:48:13

标签: java loops for-loop math random

我通过以下代码生成随机字符:

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数字不能相等,这里是图片来解释我需要的东西。

enter image description here

数字 4 位于同一个方格: -

**
**

如何防止数字在方块的一部分中相等?

提前致谢。

2 个答案:

答案 0 :(得分:0)

只需存储输出的最后一行,并将位置N的数字与数字last_line[N-1]last_line[N]last_line[N+1]进行比较。处理N-1N+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位数字加上当前行中的前一位数字,并对左右边界进行适当调整。