Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用for循环时,是否有方法使数组中的随机字符串值只调用一次?_Java_Arrays_For Loop_Random_Joptionpane - Fatal编程技术网

Java 在使用for循环时,是否有方法使数组中的随机字符串值只调用一次?

Java 在使用for循环时,是否有方法使数组中的随机字符串值只调用一次?,java,arrays,for-loop,random,joptionpane,Java,Arrays,For Loop,Random,Joptionpane,我想制作一个程序,在其中,在for循环中输入输入,在迭代之后,数组中的随机字符串值将与它一起放置在最后的输出消息中。 我不希望字符串值重复,我希望每个值只生成一次。我该怎么做呢?(两个数组中的int值和string值也需要保持匹配,因此苹果应该总是喜欢数字1,香蕉和数字2等) 我希望输出如下所示: 亚历克斯喜欢芒果和数字3 约翰喜欢苹果和数字1 package example; import javax.swing.JOptionPane; import java.util.Random; pu

我想制作一个程序,在其中,在for循环中输入输入,在迭代之后,数组中的随机字符串值将与它一起放置在最后的输出消息中。 我不希望字符串值重复,我希望每个值只生成一次。我该怎么做呢?(两个数组中的int值和string值也需要保持匹配,因此苹果应该总是喜欢数字1,香蕉和数字2等)

我希望输出如下所示:

亚历克斯喜欢芒果和数字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);
    }
    
}
简喜欢香蕉和数字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);
    }
    
}
包示例;
导入javax.swing.JOptionPane;
导入java.util.Random;
公开课范例{
公共静态void main(字符串[]args){
StringBuilder生成器=新的StringBuilder();

对于(int a=1;a,您可以在for循环之外创建水果和数字的无序列表,然后使用它们的索引获取唯一元素:

最终StringBuilder生成器=新StringBuilder();
最终列表水果=数组.asList(“苹果”、“香蕉”、“芒果”);
最终列表编号=数组.asList(1,2,3);
收藏。洗牌(水果);
收藏。洗牌(数字);
断言fruits.size()==numbers.size();
对于(int i=0;i
您需要保持某种状态,以确保不重复数字。最慢的方法是从数字数组中删除正在检索的值


如果您将数字数组转换为整数列表,并使用pop方法检索值,它应该会按预期工作。

这是否回答了您的问题?虽然这可以使随机值不重复,但数组不再匹配。(芒果和数字2将匹配,而不是3)我已经按照您的建议使用了
assert fruits.size()==numbers.size();
,但它仍然不起作用,有什么方法可以解决这个问题吗?