java - 有没有办法在使用 for 循环时只调用一次数组中的随机字符串值?
问题描述
我想制作一个程序,您可以在 for 循环中输入输入,并且在迭代之后,来自数组的随机字符串值将与它一起放置在最后的输出消息中。我不希望字符串值重复,我希望每个值只产生一次。我该怎么做呢?(两个数组中的 int 值和字符串值也需要保持匹配,所以苹果应该总是导致喜欢他的数字 1,香蕉的数字 2 等等)
我希望输出如下:
亚历克斯喜欢芒果和数字 3
约翰喜欢苹果和数字 1
简喜欢香蕉和 2 号
代替:
亚历克斯喜欢芒果和数字 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);
推荐阅读
- python - 如何在 tkinter 中打开关闭的窗口?
- html - jQuery Post 仅在 iPad 上失败 - 为什么?
- dependent-type - 如何在 MMT 中粘合/识别两个结构中的夹杂物?
- python - Python database handling
- excel - Having issues working with multiple woorkbooks using vba
- node.js - how to create new array when using forEach
- rx-java - RxJava: how to make "generate" operator emit infinite stream lazily to downstream "concatMap"
- web-chat - How to debug Webchat in iPhone Simulator
- python - sending email using smtplib and SSL but receiver is no receiving it
- php - Inherit @IsGranted("ROLE_ADMIN") from parent route or controller