gpt4 book ai didi

java - 如何确保 4 个随机变量永远不相等?

转载 作者:行者123 更新时间:2023-12-02 13:22:03 28 4
gpt4 key购买 nike

我有 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 个显示随机形状的 ImageView (保存在可绘制文件夹中)。下面是我的应用程序的图像,以便您更好地理解我的意思...

shapegame

底部的 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 语句。请帮助我!

最佳答案

如果图像总数很大,那么每次选择新图像时检查它是否已经在您的集合中。万一出现这种情况,请拒绝它并重新选择。

如果图像总数不是很大,则不太可能发生重复。在这种情况下,从索引 0 到 (n-1) 中选择第一个。然后将您选择的那个交换到位置 0。接下来,从索引 1 到 (n-1) 中选择第二个。然后将其交换到位置 1。继续,直到完成一组,在您的情况下,该组将位于位置 0 到 3。(该算法称为 Fisher-Yates shuffle 。)

关于java - 如何确保 4 个随机变量永远不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43527079/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com