如何解决有没有办法在使用 for 循环时只调用一次数组中的随机字符串值?
我想编写一个程序,您可以在 for 循环中输入输入,在迭代之后,数组中的随机字符串值将与它一起放在最后的输出消息中。 我不希望字符串值重复,我希望每个值只生成一次。我该怎么做呢? (两个数组中的 int 值和 string 值也需要保持匹配,所以苹果应该总是导致喜欢数字 1,香蕉喜欢数字 2 等)
我希望输出如下:
Alex 喜欢芒果和数字 3
约翰喜欢苹果和数字 1
简喜欢香蕉和数字 2
代替:
Alex 喜欢芒果和数字 3
约翰喜欢芒果和数字 3
简喜欢苹果和数字 1
package example;
import javax.swing.JOptionPane;
import java.util.Random;
public class Example {
public static void main(String[] args) {
StringBuilder generator = new StringBuilder();
for (int a=1; a<4; a++){
String name = JOptionPane.showInputDialog(null,"Enter person " + a + "'s name");
Random random = new Random();
String [] fruit = {"apples","bananas","mangos"};
int [] number = {1,2,3};
int randomIndex = random.nextInt(fruit.length);
generator.append(name).append(" likes ").append(fruit[randomIndex]).append(" and the number ").append(number[randomIndex]).append("\n");
}
JOptionPane.showMessageDialog(null,generator);
}
}
解决方法
您可以在 for 循环之外创建无序的水果和数字列表,然后使用它们的索引获取唯一元素:
final StringBuilder generator = new StringBuilder();
final List<String> fruits = Arrays.asList("apples","bananas","mangos");
final List<Integer> numbers = Arrays.asList(1,2,3);
Collections.shuffle(fruits);
Collections.shuffle(numbers);
assert fruits.size() == numbers.size();
for (int i = 0; i < fruits.size(); i++) {
final String name = JOptionPane.showInputDialog(null,"Enter person " + i + "'s name");
generator.append(name)
.append(" likes ")
.append(fruits.get(i))
.append(" and the number ")
.append(numbers.get(i))
.append("\n");
}
JOptionPane.showMessageDialog(null,generator);
,
您需要保持某种状态以确保不会重复数字。最懒惰的方法是从 number 数组中删除您正在检索的值。
如果您将 number 数组转换为整数列表并使用 pop 方法检索该值,它应该会按预期工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。