随机绘图坐标

时间:2014-02-03 21:53:50

标签: java random jframe draw

嘿,我需要编写一个随机生成正方形,圆形等坐标的代码。我试过这种方式(我跳过Main类):

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Oval extends JPanel {

        Random random1 = new Random(100);
        Random random2 = new Random(100);
        Random random3 = new Random(100);
        Random random4 = new Random(100);

        int x1 = random1.nextInt();
        int x2 = random2.nextInt();
        int x3 = random3.nextInt();
        int x4 = random4.nextInt();

        protected void paintComponent(Graphics g) 
        {
            super.paintComponent(g);      

            //oval
            g.setColor(Color.blue);
            g.fillOval(30, 40, 20, 20);

            //rectangle
            g.setColor(Color.red);
            g.fillRect(x1, x2, x3, x4);

            //triangle
            int xpoints[] = {165, 145, 205, 145, 145};
            int ypoints[] = {65, 125, 115, 145, 105};
            int npoints = 3;
            g.setColor(Color.pink);
            g.fillPolygon(xpoints, ypoints, npoints);

            //trapezoid
            int trxpoints[] = {265, 285, 305, 245, 245};
            int trypoints[] = {165, 165, 215, 225, 205};
            int trnpoints = 4;
            g.setColor(Color.black);
            g.fillPolygon(trxpoints, trypoints, trnpoints);  
        }
 }

我用随机数填充矩形'坐标,但最后它用一个为矩形保留的颜色填充我的整个JFrame。有什么问题?

2 个答案:

答案 0 :(得分:0)

为什么会发生这种情况?这是因为您使用相同的种子创建了4个Random个实例。初始化100对象时,您正在传递Random(相同的种子)作为参数。此种子可用于重复随机调用。在您的情况下,每个Random对象将在调用方法时返回相同的随机序列。如果您想自己尝试,请使用相同的种子创建两个Random实例,并尝试通过某些方法调用和打印结果。

如何解决此问题?只需创建一个,并为每个变量nextInt()x1调用x2。另外,我建议你在构造函数中执行此操作(初始化):

Random random1;
int x1;
int x2;
int x3;
int x4;

public Test()
{
    random1 = new Random(100); // Give a seed if you want to run 
                               // the program with same random sequence each time
                               // If you want different sequences each time
                               // you run the program use 'new Random()'
    x1 = random1.nextInt();
    x2 = random1.nextInt();
    x3 = random1.nextInt();
    x4 = random1.nextInt();
}

答案 1 :(得分:0)

首先:

    Random random1 = new Random(100);
    Random random2 = new Random(100);
    Random random3 = new Random(100);
    Random random4 = new Random(100);

这为每个random*变量提供了相同的序列。

其次:

nextInt方法:

  

从此随机数生成器的序列中返回下一个伪随机数,均匀分布的int值。 nextInt的一般契约是伪随机生成并返回一个int值。所有2 ^ 32个可能的int值都以(近似)相等的概率生成

它为您提供了非常大的值(比您的框架大得多)

我建议如下:

random.nextInt(this.getWidth()), random.nextInt(this.getHeight())