kai*_*ran 3 java random methods
我必须运行一个生成随机tetromino的Java程序.我将所有七个代码存储在单独的方法中:
public class TetrisComponent extends JComponent{
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
Rectangle2D.Double i = new Rectangle2D.Double(0, 100, 50, 50);
g2.setColor(Color.black);
g2.draw(i);
g2.setColor(Color.CYAN);
g2.fill(i);
Rectangle2D.Double i2 = new Rectangle2D.Double(50, 100, 50, 50);
g2.setColor(Color.black);
g2.draw(i2);
g2.setColor(Color.CYAN);
g2.fill(i2);
Rectangle2D.Double i3 = new Rectangle2D.Double(100, 100, 50, 50);
g2.setColor(Color.black);
g2.draw(i3);
g2.setColor(Color.CYAN);
g2.fill(i3);
Rectangle2D.Double i4 = new Rectangle2D.Double(150, 100, 50, 50);
g2.setColor(Color.black);
g2.draw(i4);
g2.setColor(Color.CYAN);
g2.fill(i4);
}
public void paintComponentj(Graphics g){
Graphics2D g2 = (Graphics2D)g;
Rectangle2D.Double j = new Rectangle2D.Double(200, 500, 50, 50);
g2.setColor(Color.black);
g2.draw(j);
g2.setColor(Color.blue);
g2.fill(j);
Rectangle2D.Double j2 = new Rectangle2D.Double(250, 500, 50, 50);
g2.setColor(Color.black);
g2.draw(j2);
g2.setColor(Color.blue);
g2.fill(j2);
Rectangle2D.Double j3 = new Rectangle2D.Double(300, 500, 50, 50);
g2.setColor(Color.black);
g2.draw(j3);
g2.setColor(Color.blue);
g2.fill(j3);
Rectangle2D.Double j4 = new Rectangle2D.Double(300, 550, 50, 50);
g2.setColor(Color.black);
g2.draw(j4);
g2.setColor(Color.blue);
g2.fill(j4);
}
}
Run Code Online (Sandbox Code Playgroud)
我如何运行这个程序(我有一个单独的TetrisViewer类)要么只运行paintComponent方法或paintComponentj方法,而是随机运行?有没有办法做到这一点?
我将这两个包装在另一个随机选择以下方法之一的方法中:
private Random rand = new Random();
public void paintRandom(Graphics g) {
if (rand.nextBoolean()) {
paintComponent(g);
} else {
paintoComponentj(g);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
要回答评论中的问题,您可以通过选择随机int而不是随机来使用两种以上方法的想法boolean.为了避免样板if-else或switch-case结构,一个优雅的解决方案可能是存储对列表中所有相关方法的引用,并随机选择要调用的索引:
private Random rand = new Random();
private final List<Consumer<Graphics>> PAINT_METHODS =
Arrays.asList(this::paintComponent, this::paintComponentj /* etc... */);
public void paintRandom(Graphics g) {
PAINT_METHODS.get(rand.nextInt(PAINT_METHODS.size())).accept(g);
}
Run Code Online (Sandbox Code Playgroud)