嘿,我需要编写一个随机生成正方形,圆形等坐标的代码。我试过这种方式(我跳过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。有什么问题?
答案 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())