【发布时间】:2017-09-17 12:48:31
【问题描述】:
我有 4 个随机变量...
int img1 = (int) Math.round((Math.random() * images.length)-1);
int img2 = (int) Math.round((Math.random() * images.length)-1);
int img3 = (int) Math.round((Math.random() * images.length)-1);
int img4 = (int) Math.round((Math.random() * images.length)-1);
我需要确保它们永远不会彼此相等,即使它们是随机的。我正在制作一个应用程序,其中有 4 个显示随机形状的图像视图(保存在可绘制文件夹中)。下面是我的应用程序的图片,以便您更好地理解我的意思...
底部的 4 个形状永远不会相同,但是我需要它们在应用程序运行时随机显示。这是我目前的代码...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
shape1 = (ImageView) findViewById(R.id.shape1);
shape2 = (ImageView) findViewById(R.id.shape2);
shape3 = (ImageView) findViewById(R.id.shape3);
shape4 = (ImageView) findViewById(R.id.shape4);
guessShape = (ImageView) findViewById(R.id.guessShape);
shapes[0] = shape1;
shapes[1] = shape2;
shapes[2] = shape3;
shapes[3] = shape4;
//store all the shapes in an array
int[] images = new int[] {R.drawable.img_0, R.drawable.img_1, R.drawable.img_2, R.drawable.img_3, R.drawable.img_4,
R.drawable.img_5, R.drawable.img_6, R.drawable.img_7, R.drawable.img_8, R.drawable.img_9, R.drawable.img_10,
R.drawable.img_11, R.drawable.img_12, R.drawable.img_13, R.drawable.img_14, R.drawable.img_15, R.drawable.img_16,
R.drawable.img_17};
int[] outlines = new int[] {R.drawable.outline_0, R.drawable.outline_1, R.drawable.outline_2,
R.drawable.outline_3, R.drawable.outline_4, R.drawable.outline_5, R.drawable.outline_6,
R.drawable.outline_7, R.drawable.outline_8, R.drawable.outline_9, R.drawable.outline_10,
R.drawable.outline_11, R.drawable.outline_12, R.drawable.outline_13, R.drawable.outline_14,
R.drawable.outline_15, R.drawable.outline_16,R.drawable.outline_17};
//generate random number between 0 and image.length
int img1 = (int) Math.round((Math.random() * images.length)-1);
int img2 = (int) Math.round((Math.random() * images.length)-1);
int img3 = (int) Math.round((Math.random() * images.length)-1);
int img4 = (int) Math.round((Math.random() * images.length)-1);
System.out.println(img1);
System.out.println(img2);
System.out.println(img3);
System.out.println(img4);
int whichImg = (int) Math.round((Math.random() * 4));
System.out.println(whichImg);
if(whichImg == 1){
whichImg = img1;
} else if(whichImg == 2){
whichImg = img2;
} else if(whichImg == 3){
whichImg = img3;
} else {
whichImg = img4;
}
int outlineID = outlines[whichImg];
//conditions so that the 4 boxes don't have the same image
if(img1 == img2 && img1 !=0 || img1 == img3 && img1 != 0 || img1 == img4 && img1 != 0){ //if img1 and another img is the same
img1 = img1 - 1;
}
else if(img2 == img3 && img2 != 0 || img2 == img4 && img2 != 0){ //if img2 and another img is the same
img2 = img2 - 1;
}
else if(img3 == img4 && img3 !=0){ //if img3 and another image is that same
img3 = img3 - 1;
}
else if(img1==0 && img2==0 && img3 == 0 && img4 == 0){ //if all the images were 0
img1 = img1 + 10;
img2 = img2 + 5;
img3 = img3 + 7;
img4 = img4 + 14;
}
else if(img1==img2 && img2 == img3 && img1 !=0 && img1 != 17){ //if img1 and 2 others were the same
img1 = img1 - 1;
img3 = img3 + 1;
}
else if(img2==img3 && img3 == img4 && img2 != 0 && img2 != 17){ //if img2 and 2 others were the same
img2 = img2 - 1;
img4 = img4 + 1;
}
else if(img3 == img4 && img4 == img2 && img3 != 0 && img3 != 17){ //if img3 and 2 others were the same
img3 = img3 - 1;
img2 = img2 + 1;
}
else if(img1 == 17 && img2 == 17 && img3 == 17 && img4 == 17){
img1 = img1 - 1;
img2 = img2 - 2;
img3 = img3 -3;
}
else {
System.out.println("Finished comparing 4 variables");//this doesnt work..fix!
}
//set the image
guessShape.setBackgroundResource(outlineID);
shape1.setBackgroundResource(images[img1]);
shape2.setBackgroundResource(images[img2]);
shape3.setBackgroundResource(images[img3]);
shape4.setBackgroundResource(images[img4]);
必须有一种更简单的方法来确保它们永远不会相互相等,而不是使用这么多的 if 语句。请帮帮我!
【问题讨论】:
-
解释一下你现在用来处理问题的逻辑,或者你尝试了什么,然后我们可以帮助你改进它。
-
我使用了 if 语句 @coinbird,但看起来要写很多,我是编码新手(精确到 3 个月),我想构建我的第一个应用程序。但是我知道编码是合乎逻辑的,必须有一种更简单的方法来确保 4 个随机数变量永远不会相同。
标签: java android function math random