Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
随机只运行一个java方法_Java_Random_Methods - Fatal编程技术网

随机只运行一个java方法

随机只运行一个java方法,java,random,methods,Java,Random,Methods,我必须运行一个Java程序来生成一个随机的tetromino。我将所有七种方法的代码存储在单独的方法中: public class TetrisComponent extends JComponent{ public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; Rectangle2D.Double i = new Rectangle2D.Double(0, 100, 50

我必须运行一个Java程序来生成一个随机的tetromino。我将所有七种方法的代码存储在单独的方法中:

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);
    }
}
private Random rand = new Random();
public void paintRandom(Graphics g) {
    if (rand.nextBoolean()) {
        paintComponent(g);
    } else {
       paintoComponentj(g);
    }
}

我如何运行这个程序(我有一个单独的TetrisViewer类)以仅运行
paintComponent
方法或
paintComponentj
方法,但随机运行?有什么方法可以做到这一点吗?

我会用另一种方法来包装这两种方法,随机选择其中一种方法:

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);
    }
}
private Random rand = new Random();
public void paintRandom(Graphics g) {
    if (rand.nextBoolean()) {
        paintComponent(g);
    } else {
       paintoComponentj(g);
    }
}
编辑:
要回答评论中的问题,您可以通过选择随机
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);
}
private Random rand=new Random();
私有最终列表绘制方法=
asList(this::paintComponent,this::paintComponentj/*等...*/);
公共空间(图g){
PAINT_METHODS.get(rand.nextInt(PAINT_METHODS.size()).accept(g);
}

我必须按如下方式重构您的代码。您可以测试随机布尔表达式以随机创建组件

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import javax.swing.JComponent;

public class TetrisComponent extends JComponent{

    private Map <String, Object> rectanglesIseries;
    private Random randomGenerator;


    public TetrisComponent() {
        rectanglesIseries = new HashMap<>();
        randomGenerator = new Random();
    }

    private void paintComponent(Graphics g){    

        Graphics2D g2 = (Graphics2D)g;

        rectangleInitializer(g2,Color.black,Color.CYAN,new int[] {0, 100, 50, 50},"i");
        rectangleInitializer(g2,Color.black,Color.CYAN,new int[] {50, 100, 50, 50},"i2");
        rectangleInitializer(g2,Color.black,Color.CYAN,new int[] {100, 100, 50, 50},"i3");
        rectangleInitializer(g2,Color.black,Color.CYAN,new int[] {150, 100, 50, 50},"i4");

    }

    private void paintComponentj(Graphics g){
        Graphics2D g2 = (Graphics2D)g;

        rectangleInitializer(g2,Color.black,Color.blue,new int[] {200, 500, 50, 50},"j");
        rectangleInitializer(g2,Color.black,Color.blue,new int[] {250, 500, 50, 50},"j2");
        rectangleInitializer(g2,Color.black,Color.blue,new int[] {300, 500, 50, 50},"j3");
        rectangleInitializer(g2,Color.black,Color.blue,new int[] {300, 500, 50, 50},"j4");

    }

    private void rectangleInitializer(Graphics2D g2,Color drawColor,Color fillColor, int [] size, String element) {
        rectanglesIseries.put(element, (Object)new Rectangle2D.Double());
        g2.setColor(drawColor);
        g2.draw((Rectangle2D.Double)rectanglesIseries.get(element));
        g2.setColor(fillColor);
        g2.fill((Rectangle2D.Double)rectanglesIseries.get(element));
    }

    public void randomComponentBuilder(Graphics g) {
        if (randomGenerator.nextBoolean()) {
            paintComponent(g);
        } else {
            paintComponentj(g);
        }   
    }
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.geom.Rectangle2D;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Random;
导入javax.swing.JComponent;
公共类TetrisComponent扩展了JComponent{
私有地图矩形系列;
专用随机发生器;
公共TetrisComponent(){
rectanglesIseries=newhashmap();
随机生成器=新随机();
}
专用组件(图形g){
图形2d g2=(图形2d)g;
矩形初始值设定项(g2,Color.black,Color.CYAN,newint[]{0,100,50,50},“i”);
矩形初始值设定项(g2,Color.black,Color.CYAN,newint[]{50,100,50,50},“i2”);
矩形初始值设定项(g2,Color.black,Color.CYAN,newint[]{100100,50,50},“i3”);
矩形初始值设定项(g2,Color.black,Color.CYAN,newint[]{15010050},“i4”);
}
专用组件J(图形g){
图形2d g2=(图形2d)g;
矩形初始值设定项(g2,Color.black,Color.blue,newint[]{200500,50,50},“j”);
矩形初始值设定项(g2,Color.black,Color.blue,newint[]{250500,50,50},“j2”);
矩形初始值设定项(g2,Color.black,Color.blue,newint[]{300500,50,50},“j3”);
矩形初始值设定项(g2,Color.black,Color.blue,newint[]{300500,50,50},“j4”);
}
私有void矩形初始值设定项(Graphics2D g2、Color drawColor、Color fillColor、int[]大小、字符串元素){
put(元素,(对象)new Rectangle2D.Double());
g2.setColor(drawColor);
g2.draw((Rectangle2D.Double)rectanglesSeries.get(element));
g2.设置颜色(填充颜色);
g2.fill((Rectangle2D.Double)rectanglesSeries.get(element));
}
公共组件生成器(图形g){
if(randomGenerator.nextBoolean()){
组分(g);
}否则{
油漆成分j(g);
}   
}
}

如果您有两种以上的方法,有没有办法做到这一点?大概四点或者四点5@kailacochran当然,您可以选择一个随机的
int
,而不是随机的
boolean
。查看我编辑的答案。只需为每个调用洗牌数组并返回第一个元素。读起来更好。