2017-10-19 116 views
1

我想写一个代码,在窗口上绘制一些特定的点。我有3个不同的点$(e1,e11),(e2,e22),(e3,e33)$。我想随机选择其中的一个,并根据输出结果绘制一个不同的点。问题与Java中的“Math.random()”

public class ChaosGame { 

    public static void main(String[] args) { 
     Window window = new Window("Chaos", 800, 800); 
     window.open(); 

     int e1 = 420; 
     int e11 = 170; 
     int e2 = 230; 
     int e22 = 670; 
     int e3 = 700; 
     int e33 = 540; 

     while (window.isOpen()) {// ändere den Fensterinhalt 
      int pos1 = 100; 
      int pos2 = 300; 
      int i = (int) (Math.random() * 3); 

      if (i == 0 || i == 3) { 
       window.fillRect(pos1 + e1/2, pos2 + e11/2, 5, 5); 
       pos1 = e1/2; 
       pos2 = e11/2; 
       window.refresh(); 
      } else if (i == 1) { 
       window.fillRect(pos1 + e2/2, pos2 + e22/2, 5, 5); 
       pos1 = e2/2; 
       pos2 = e22/2; 
       window.refresh(); 
      } else { 
       window.fillRect(pos1 + e3/2, pos2 + e33/2, 5, 5); 
       pos1 = e3/2; 
       pos2 = e33/2; 
       window.refresh(); 
      } 
     } 
    } 
} 

fillRect在新窗口中绘制我的点。现在,当我运行这个程序时,只有两点出现,即使它应该继续“while window.isOpen”,直到我关闭窗口。我想我的Math.random()可能是错误的。

+0

打印矩形的坐标。你可能只是在窗外绘制它们。 –

+0

我怎么能在窗外画画?应该选择位置以便应该在里面绘制所有内容 – Cherry

+0

查看'else'中的'fillRect'。但即使你解决了这个问题,我也不明白你为什么期望这样做会随机抽取。 –

回答

0

您需要在else语句中将window.fillRect(pos1 + e2/2, pos2 + e22/2, 5, 5);更改为window.fillRect(pos1 + e3/2, pos2 + e33/2, 5, 5);。你在两种情况下绘制相同的东西。

+0

谢谢,我已经更新了..但是,它只会画3点,并且我希望它总是从实际位置走向所选点 – Cherry

+0

您能打印出填充的坐标吗?您可能还需要随机更改e1,e11等的值,并尝试在所有'window.fillRect((pos1 + e1)/ 2,(pos2 + e11)/ 2,5)中添加括号, 5); ' –