繁体   English   中英

如何在不重复的情况下随机化切换条件下的案例

[英]How can Randomize the cases in switch condition without repeating

嗨,我正在尝试使用此模型制作一个Android应用。主要目的是在切换条件下随机分配各种情况,如以下代码所示。 当我在每种情况下再次调用该方法时,出现相同图像的机会很高。因此,我想知道如何使此逻辑按顺序显示图像(即,我想随机化,但是图像一旦出现在所有“图像周期”完成后才应显示)

public class MainActivity extends Activity{

//int blue,green,yellow,red,brown,white,pink,black;
//Boolean BLUE,GREEN,YELLOW,RED,BROWN,WHITE,PINK,BLACK;
ImageView iv1,iv2,iv3,fs;
private Handler handler = new Handler();
MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    iv1 = (ImageView)findViewById(R.id.image1);
    iv2 = (ImageView)findViewById(R.id.image2);
    iv3 = (ImageView)findViewById(R.id.image3);
    fs = (ImageView)findViewById(R.id.img_fs);
    fs.setVisibility(View.GONE);
    switchingLogic();

}

public void switchingLogic() {      
    Random random = new Random();
    int x = random.nextInt(4)+1;

    switch (x) {
    case 1:
        mp = MediaPlayer.create(getApplicationContext(), R.raw.touch_blue);
        mp.start();
        iv1.setVisibility(View.VISIBLE);
        iv2.setVisibility(View.VISIBLE);
        iv3.setVisibility(View.VISIBLE);
        iv1.setImageResource(R.drawable.play_blue_1);
        iv2.setImageResource(R.drawable.play_blue_2);
        iv3.setImageResource(R.drawable.play_blue_3);
        iv1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                switchCases();

                iv_gone();
                mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
                mp.start();

                fs.setVisibility(View.VISIBLE);
                fs.setImageResource(R.drawable.big_play_blue);

            }
        });
        iv2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv2.setVisibility(View.GONE);

            }
        });
        iv3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv3.setVisibility(View.GONE);

            }
        });

        break;

    case 2:
        iv1.setVisibility(View.VISIBLE);
        iv2.setVisibility(View.VISIBLE);
        iv3.setVisibility(View.VISIBLE);
        iv1.setImageResource(R.drawable.play_green_1);
        iv2.setImageResource(R.drawable.play_green_2);
        iv3.setImageResource(R.drawable.play_green_3);

        iv2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                switchCases();
                iv_gone();
                mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
                mp.start();
                fs.setVisibility(View.VISIBLE);
                fs.setImageResource(R.drawable.big_play_green);
            }
        });
        iv1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv1.setVisibility(View.GONE);

            }
        });
        iv3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv3.setVisibility(View.GONE);

            }
        });
        break;
    case 3:
        iv1.setVisibility(View.VISIBLE);
        iv2.setVisibility(View.VISIBLE);
        iv3.setVisibility(View.VISIBLE);
        iv1.setImageResource(R.drawable.play_yellow_1);
        iv2.setImageResource(R.drawable.play_yellow_2);
        iv3.setImageResource(R.drawable.play_yellow_3);

        iv3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                switchCases();
                iv_gone();
                mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
                mp.start();
                fs.setVisibility(View.VISIBLE);
                fs.setImageResource(R.drawable.big_play_yellow);
            }
        });
        iv1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv1.setVisibility(View.GONE);

            }
        });
        iv2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv2.setVisibility(View.GONE);

            }
        });

        break;
    case 4:
        iv1.setVisibility(View.VISIBLE);
        iv2.setVisibility(View.VISIBLE);
        iv3.setVisibility(View.VISIBLE);
        iv1.setImageResource(R.drawable.play_red_1);
        iv2.setImageResource(R.drawable.play_red_2);
        iv3.setImageResource(R.drawable.play_red_3);

        iv1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                switchCases();
                iv_gone();
                mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
                mp.start();
                fs.setVisibility(View.VISIBLE);
                fs.setImageResource(R.drawable.big_play_red);
            }
        });
        iv2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv2.setVisibility(View.GONE);

            }
        });
        iv3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                iv3.setVisibility(View.GONE);

            }
        });
        break;
    default:
        break;
    }
      }
    protected void switchCases() {
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                fs.setVisibility(View.GONE);
                switchingLogic();
            }
        }, 1500);
    }
    public void iv_gone() {
        iv1.setVisibility(View.GONE);
        iv2.setVisibility(View.GONE);
        iv3.setVisibility(View.GONE);
    }

有什么解决方案或任何替代方法可用。 谢谢。

这是我评论的一个简单示例,请尝试以下操作:

public class MainActivity extends Activity{

    //int blue,green,yellow,red,brown,white,pink,black;
    //Boolean BLUE,GREEN,YELLOW,RED,BROWN,WHITE,PINK,BLACK;
    ImageView iv1,iv2,iv3,fs;
    private Handler handler = new Handler();
    MediaPlayer mp;
    Random random = new Random(); // Use only one random object, do not redeclare it
    List<Integer> recentResults; // A list saving your results

    public void switchingLogic() {      
        if(recentResults == null) recentResults = new ArrayList<Integer>();
        if(recentResults.size() == 4) recentResults.clear();

        int x = random.nextInt(4)+1;

        while(recentResults.contains(x)){
            x = random.nextInt(4)+1;
        }

        recentResults.add(x);

        switch (x) { 
            case 1: {
                // Other codes
                setSpecialOnClickListenerWithDrawable(iv1, R.drawable.big_play_blue);
                setGeneralOnClickListener(iv2);
                setGeneralOnClickListener(iv3);

                break;
            }
            // Other cases here
        }
    }

    public void setGeneralOnClickListener(ImageView iv) {      
        iv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // v here will refers back to iv itself
                v.setVisibility(View.GONE);
            }
        });
    }

    public void setSpecialOnClickListenerWithDrawable(ImageView iv, final int drawable) {      
        iv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                switchCases();

                iv_gone();
                mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
                mp.start();

                fs.setVisibility(View.VISIBLE);
                fs.setImageResource(drawable);
            }
        });
    }

    // Your other codes here
}

好吧,我做了一个简单的应用程序,在上面执行,得到了以下结果:4 3 2 1 2 4 1 3 3 1 4 2 1 3 4 2 3 4 2 1.这是您想要的吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM