[英]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.