0

我是编码新手,我想知道如何编码这个程序以便匹配数组。(苹果和 1 号匹配,香蕉和 2 号匹配,芒果和 3 号匹配)我用过assert fruits.size() == numbers.size();但它仍然无法正常工作,有什么办法可以解决这个问题吗?

package example;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.swing.JOptionPane;

public class Example {
    
    public static void main(String[] args) {
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++) {
int a = i+1;
    final String name = JOptionPane.showInputDialog(null, "Enter person " + a + "'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);
    }
}

我希望输出为:

亚历克斯喜欢芒果和数字 3

约翰喜欢苹果和数字 1

简喜欢香蕉和 2 号

代替:

亚历克斯喜欢芒果和数字 1

约翰喜欢香蕉和数字 3

简喜欢苹果和数字 2

4

2 回答 2

1

我会说水果和数字在概念上属于同一个对象(一对由数字+水果名称组成)。

您应该将这些对组成一个数组(例如 using AbstractMap.SimpleEntry<String, Integer>,它基本上是一个以水果名称作为键,以数字作为值的对)并对其进行洗牌。

然后您可以检索名称getKey()和号码getValue()

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.AbstractMap;
import javax.swing.JOptionPane;

public class Example {

    public static void main(String[] args) {
        final StringBuilder generator = new StringBuilder();

        final List<AbstractMap.SimpleEntry<String, Integer>> fruits = Arrays.asList(
                new AbstractMap.SimpleEntry("apples", 1),
                new AbstractMap.SimpleEntry("bananas", 2),
                new AbstractMap.SimpleEntry("mangos", 3)
        );

        Collections.shuffle(fruits);

        for (int i = 0; i < fruits.size(); i++) {
            final String name = JOptionPane.showInputDialog(null, "Enter person " + (i + 1) + "'s name");

            generator.append(name)
                    .append(" likes ")
                    .append(fruits.get(i).getKey())
                    .append(" and the number ")
                    .append(fruits.get(i).getValue())
                    .append("\n");
        }

        JOptionPane.showMessageDialog(null, generator);
    }
}

示例输出:

在此处输入图像描述

于 2021-05-14T09:36:08.763 回答
0

假设您有两个列表:

final List<String> fruits = Arrays.asList("apples", "bananas", "mangos");
final List<Integer> numbers = Arrays.asList(1, 2, 3);

你可以做:

Map<Integer, String> numberToFruit = new HashMap<>();

for (int i = 0; i < fruits.size(); i++) {
    numberToFruit.put(numbers.get(i), fruits.get(i));
}

Collections.shuffle(numbers);

List<String> newFruits = numbers.stream()
        .map(numberToFruit::get)
        .collect(Collectors.toList());

System.out.println(newFruits);
System.out.println(numbers);

输出:

[apples, mangos, bananas]
[1, 3, 2]
于 2021-05-14T09:48:12.110 回答