如何在循环中捕获重复的用户输入,然后在程序结束时全部显示它们?

时间:2018-04-01 16:52:37

标签: java

我是Java的初学者,编写了260多行代码,菜单驱动的程序类程序。不幸的是,我必须遵守与我大学学术行为有关的规则,我不能在这个确切的时刻粘贴我在这里的代码,尽管我会尽我所能来解释我的难题,希望有更多知识渊博的人可以指出我正确的方向。我不一定期望代码形式的解决方案。我的无数互联网搜索毫无结果,即使我的所有阅读材料,无数的搜索查询组合以及在论坛上花费数小时,包括这一点,我都会感到沮丧和沮丧。

基本上,我的程序差不多完成了。这是一个预订系统,有一些菜单要求用户输入。有一些do-while迭代和条件语句允许用户在输入输入后返回主菜单,以及一些基本的错误验证。

我的主要问题是最后的子菜单;我使用Scanner(所有字符串)输入三个值,我甚至可以在返回主菜单之前将这三个值打印到控制台。如果我再次输入相同的子菜单并输入三个不同的输入,它将覆盖前一组输入。现在,我理解每次调用“nextLine”方法时都会出现这种情况,但我必须在程序结束时捕获每个单独的输入集。

我尝试将值存储在单个和多维数组中以及for(foreach?)循环中,但它们只是用相同的三个值填充整个索引范围。我也尝试过字符串连接,StringBuilder和ArrayLists,但是这些值的连续覆盖使得我几乎不可能用它们实现任何有意义的东西。理想情况下,我只想输入值,以某种方式保存它们,输入并保存更多值,然后在程序的最后检索所有值,以便我可以使用格式化的字符串显示它们。我可以在子菜单中输入的最大条目数为10.冒一个模糊问题的风险,哪种方法会让您觉得最合适?一旦我知道我必须吠叫什么树,我就可以简单地研究我的答案。这种“达到同样令人满意的结果的100种不同方式”Java的本质 - 我敢说一般的编程语言 - 对像我这样的初学者来说相当压倒性。

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解此问题,但您似乎可以将输入值添加到List<String[]>

List<String[]> data = new ArrayList<>();

// get your first 3 data, add them to the list
data.add(new String[] {"value 1", "value 2", "value 3"});

// get your first 3 new data, add them to the list
data.add(new String[] {"value 4", "value 5", "value 6"});

然后你可以打印出来

for(String[] values: data) {
    System.out.println(values[0] + " | " + values[1] + " | " + values[2] );
}

输出

value 1 | value 2 | value 3
value 4 | value 5 | value 6

答案 1 :(得分:0)

ArrayList适合这种情况。它允许您动态添加新项目,这正是您在这里尝试做的事情,不是吗?

但首先,我建议你封装&#34;三个值&#34;你一直在谈论课堂。根据您的说法,它们代表了一些有关预订的信息。我将此课程称为Reservation

class Reservation {
    // name these variables properly!
    private String someValue1;
    private String someValue2;
    private String someValue3;

    @Override // this returns a formatted string representation of a reservation
    public String toString() {
        return "someValue1: " + someValue1
             + "\nsomeValue2: " + someValue2
             + "\nsomeValue3: " + someValue3;
    }

    public Reservation(String someValue1, String someValue2, String someValue3) {
        this.someValue1 = someValue1;
        this.someValue2 = someValue2;
        this.someValue3 = someValue3;
    }
}

现在您可以创建ArrayList<Reservation>

// put this outside of any method
static ArrayList<Reservation> reservations = new ArrayList<>();

每当用户进入子菜单时,你都会做这样的事情,对吗?

String someValue1 = scanner.nextLine();
String someValue2 = scanner.nextLine();
String someValue3 = scanner.nextLine();

在这些行之后,创建一个Reservation

Reservation reservation = new Reservation(someValue1, someValue2, someValue3);

并将其放入reservations列表:

reservations.add(reservation);

如果您想打印所有预订,只需:

for(Reservation r : reservations) {
    System.out.println(r);
    System.out.println();
}