谁能帮助我在同一对话框中打印用户输入和对ArrayList进行排序? (例如User input = **Toyota, Mazda, Ford**Sorted input =**Ford, Mazda, Toyota**)。

这是我第一次使用对话框。我是否可以使用其他工具,还是应该在单独的类中编写Collections.sort(auto);并将其插入打印中?

代码如下所示:

    Scanner in = new Scanner(System.in);
    ArrayList<String> auto = new ArrayList<>();
    boolean done = false;
    do {
        String autoList = JOptionPane.showInputDialog(null, "Enter an Auto you like (q to finish):",
                "click OK for each auto entry");
        if (autoList.equalsIgnoreCase("q")) {
            break;
        }
        auto.add(autoList);
    } while (!done);
    Collections.sort(auto);
    JOptionPane.showMessageDialog(null, "Arra list " + auto
            + "\n Sorted list is " + auto);
    // should print straight user's input on one line and sorted Array list on the second line
    in.close();

最佳答案

问题在于,当您调用Collections.sort(list)时,该列表将被排序,因此当您在消息框中两次打印出auto时,它将打印两次已排序的列表。另外,返回类型为void,因此您无法将其连接到字符串的末尾。一个例子可以在这里看到。

    Scanner in = new Scanner(System.in);
    ArrayList<String> auto = new ArrayList<>();
    boolean done = false;
    do {
        String autoList = JOptionPane.showInputDialog(null, "Enter an Auto you like (q to finish):",
                "click OK for each auto entry");
        if (autoList.equalsIgnoreCase("q")) {
            break;
        }
        auto.add(autoList);
    } while (!done);

    System.out.println("auto: "+ auto);

    Collections.sort(auto);

    System.out.println("auto: "+ auto);

    JOptionPane.showMessageDialog(null, "Arra list " + auto
            + "\n Sorted list is " + auto);
    // should print straight user's input on one line and sorted Array list on the second line
    in.close();


输出:

auto: [Ford, Mazda, Toyota, BMW]
auto: [BMW, Ford, Mazda, Toyota]


当您打印到消息框时,列表已经排序。一种选择是在排序之前复制未排序列表,因此在排序之后,您可以引用未排序值。

这是您如何做的一个例子

   Scanner in = new Scanner(System.in);
    ArrayList<String> auto = new ArrayList<>();
    ArrayList<String> unsortedAutos = new ArrayList<>();
    boolean done = false;
    do {
        String autoList = JOptionPane.showInputDialog(null, "Enter an Auto you like (q to finish):",
                "click OK for each auto entry");
        if (autoList.equalsIgnoreCase("q")) {
            break;
        }
        auto.add(autoList);
    } while (!done);


    unsortedAutos = (ArrayList<String>) auto.clone();
    Collections.sort(auto);

    System.out.println("auto: "+ unsortedAutos);
    System.out.println("auto: "+ auto);

    JOptionPane.showMessageDialog(null, "Arra list " + unsortedAutos
            + "\n Sorted list is " + auto);
    // should print straight user's input on one line and sorted Array list on the second line
    in.close();


输出:

auto: [Mazda, Ford, BMW]
auto: [BMW, Ford, Mazda]

09-30 18:45
查看更多