首页 > 解决方案 > 接受用户输入以选择要编辑的变量

问题描述

我正在尝试接受用户输入来选择他们想要编辑的变量。假设我有 10 个变量,我希望用户能够输入“第 1 行”,这会提示他们通过另一个输入来更改该变量的值。我会发布代码,但我没有任何与此相关的内容,因为我什至不知道如何开始。

编辑:我不想有这样的东西:

if (input == "row 1") {     
    r1 = scan.nextInt();
}

因为我正在处理很多变量,并且不想为一个单一的变量发表声明。

标签: java

解决方案


在几分钟内完成。只是为了给你看一个模式。

public class TestClass {
    private final List<String> list = new ArrayList<>(16);
    private final Map<String, RowHolder> holderMap = new HashMap<>(16);

    {
        list.add("LoL 1");
        list.add("LoL 2");
        list.add("LoL 3");
        list.add("LoL 4");
        list.add("LoL 5");

        holderMap.put("Row 1", RowHolder.of(v -> { list.set(0, v); }, s -> list.get(0)));
        holderMap.put("Row 2", RowHolder.of(v -> { list.set(1, v); }, s -> list.get(1)));
        holderMap.put("Row 3", RowHolder.of(v -> { list.set(2, v); }, s -> list.get(2)));
        holderMap.put("Row 4", RowHolder.of(v -> { list.set(3, v); }, s -> list.get(3)));
        holderMap.put("Row 5", RowHolder.of(v -> { list.set(4, v); }, s -> list.get(4)));
    }

    public String getRow(final String row) {
        return holderMap.get(row).function.apply(row);
    }

    public void setRow(
            final String row,
            final String value) {
        holderMap.get(row).consumer.accept(value);
    }

    static class RowHolder {
        final Consumer<String> consumer;
        final Function<String, String> function;

        RowHolder(
                final Consumer<String> consumer,
                final Function<String, String> function) {
            this.consumer = consumer;
            this.function = function;
        }

        static RowHolder of(
                final Consumer<String> consumer,
                final Function<String, String> function) {
            return new RowHolder(consumer, function);
        }
    }
}

用法基本上是:

final TestClass testClass = new TestClass();
final String rowValue = testClass.getRow("Row 1");
testClass.setRow("Row 1", "LoL LoL");

推荐阅读