繁体   English   中英

Java - 使用 ArrayList/HashSet 查询的搜索结果进行菜单选择

[英]Java - use search results from ArrayList/HashSet query for menu selection

我想知道是否有人可以给我一些关于我拥有的基本程序的下一步的指示。

我有以下示例 java 代码:

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    ArrayList<Transport> transportList = new ArrayList<>();
    Scanner input = new Scanner(System.in);

    public void addToList() {
        transportList.add(new Transport("Blue", "Large", "Plane"));
        transportList.add(new Transport("Red", "Small", "Car"));
        transportList.add(new Transport("Brown", "Large", "Train"));
        transportList.add(new Transport("Yellow", "Small", "Boat"));
        transportList.add(new Transport("Yellow", "Small", "Plane"));
        transportList.add(new Transport("Brown", "Large", "Car"));
        transportList.add(new Transport("Red", "Large", "Train"));
        transportList.add(new Transport("Blue", "Small", "Boat"));

        searchColour();
    }

    public void searchColour() {
        System.out.println("Enter a colour to search:\n");
        String colourSearch = input.next();
        for (Transport transport : transportList) {
            if (transport.getColour().toLowerCase().equals(colourSearch.toLowerCase())) {
                System.out.printf(
                    "There is a %s %s that is %s \n",
                    transport.getSize(),
                    transport.getType(),
                    transport.getColour()
                );
            }
        }
        searchColour();
    }

    public static void main(String[] args) {
        new Main().addToList();
    }
}
public class Transport {

    private String colour;
    private String size;
    private String type;

    // All-args constructor, getters and setters omitted for brevity
}

这将运行并提示用户输入颜色。 然后它搜索 ArrayList 并输出匹配项。 我现在需要做的是获取从颜色搜索中获得的结果,并在菜单中重新使用它们以供选择。

例如,如果我搜索“红色”,我会得到:

有一辆红色的小车

有一辆红色的大火车

我想要的是在他们面前放一个数字,并提示选择那个人是什么。 所以它应该这样说:

  1. 有一辆红色的小车
  2. 有一辆红色的大火车

“选择你想要的交通工具”

输出下一个问题并提示输入我可以使用的扫描仪,我不知道如何在结果的开头添加数字,因为我知道随着我的 ArrayList 增加项目数量,以及我如何进行选择从中选择,以便用户可以按 1 或 2。

任何人都可以提供建议吗? 我想我需要使用另一个 ArrayList 但我不确定这应该如何构建。

我认为您应该利用一个事实,即 ArrayList 将元素保持在插入顺序中。 例如,您可以使用“indexOf(Object o)”方法来获取要打印的数字。 (您必须添加 1 才能获得示例,因为它以 0 开头。)

对于 select 项目,您可以使用“get(int index)”并让用户键入索引。 (这里你必须减去 1,就像上面一样。)

你想要的是一个计数器。 创建一个int变量来跟踪问题编号。

当用户输入一个数字时,使用 List 的get方法来检索选择:

public void searchColour() {
    System.out.println("Enter a colour to search:\n");
    String colourSearch = input.next();

    int questionNumber = 1;
    for (Transport transport : transportList) {
        if (transport.getColour().toLowerCase().equals(colourSearch.toLowerCase())) {
            System.out.printf(
                "%d. There is a %s %s that is %s \n",
                questionNumber++,
                transport.getSize(),
                transport.getType(),
                transport.getColour()
            );
        }
    }

    int choice;
    do {
        System.out.println();
        System.out.println("Choose which transport you want:");
        choice = input.nextInt();
    } while (choice < 1 || choice > transportList.size());

    // List indices start at zero, not one.
    Transport transport = transportList.get(choice - 1);

    System.out.printf("You chose a %s %s that is %s%n",
                transport.getSize(),
                transport.getType(),
                transport.getColour()
}

println方法在打印您传递的参数后打印一个换行符。 因此,您不需要传递以\n结尾的字符串,除非您真的想在文本之后打印一个空行(这在 Windows 中可能不起作用,其中换行符序列实际上是两个字符\r\n )。

printf方法中,您可以使用特殊的格式化程序序列%n而不是文字\n以确保始终使用系统的换行符序列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM