我发现我的程序出现了一些奇怪的问题。
这个程序基本上是用来进行组件点击的,因为它是测试随机性的一个概念。
如你所见,它正确地输出了,因为它应该有向中间点击的趋势,这做得很好。
问题是,它似乎存在偏差。
import java.applet.Applet;
import java.awt.Point;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.awt.*;
public class Testing extends Applet {
/**
*
*/
private static final long serialVersionUID = -2441995094105327849L;
public void init() {
setSize(WIDTH, HEIGHT);
img = createImage(WIDTH, HEIGHT);
g = img.getGraphics();
paint(g);
setVisible(true);
g.setColor(new Color(0, 0, 0));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(new Color(55, 55, 55, 55));
main();
}
public final static int WIDTH = 400, HEIGHT = 400;
public static int[] widths = new int[WIDTH], heights = new int[HEIGHT];
public static ArrayList<String> set = new ArrayList<String>();
public Image img;
public Graphics g;
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public void update(Graphics g) {
paint(g);
}
public void main() {
int count101 = 0;
int count100 = 0;
int count99 = 0;
try {
PrintWriter pw = new PrintWriter(new FileWriter(
new File("Data.dat")));
Point center = new Point(WIDTH / 2, HEIGHT / 2);
int runs = 10000000;
for (int i = 0; i < runs; i++) {
int x = center.x
- (int) ((Math.random() - Math.random())
* Math.random() * center.x);
int y = center.y
- (int) ((Math.random() - Math.random())
* Math.random() * center.y);
widths[x]++;
heights[y]++;
repaint();
g.fillRect(x, y, 1, 1);
if((x & y) == 101){
count101++;
}
if((x & y) == 100){
count100++;
}
if((x & y) == 99){
count99++;
}
}
System.out.println(count101);
System.out.println(count100);
System.out.println(count99);
repaint();
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这会不断输出有偏见的结果。
它会输出以下内容:
3640
10918
3741
这个结果具有相当的偏见,因为它大部分都遵循一个趋势,随着所有其他值的线性增长,但一旦达到100分,它决定让它比其他数字高6%。
有人知道这背后的原因吗?
顺便说一下,我有一个包含每个结果的txt文件,并重复了10,000,000次,附带百分比等信息,文件相当长,所以我不会贴出来,但我有这些信息。
x
和y
进行按位与运算?你希望这样做有什么意义?或者你是期望if((x & y) == 101)
与if ((x == 101) && (y == 101))
的含义相同吗? - Jon Skeetif((x&y)==101)
还是if(x==101 && y==101)
? - assylias