Java - 迭代ArrayList;根据用户输入显示下一个或上一个项目

时间:2018-05-28 10:41:00

标签: java arrays

我正在尝试遍历ArrayList,逐步显示元素,根据用户输入显示下一个元素或前一个元素。这是我到目前为止的示例代码:

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

public class ProbaCuLista {

    public static void main(String[] args) {

        ArrayList<String> animals = new ArrayList<String>();

        animals.add("fox");
        animals.add("cat");
        animals.add("dog");
        animals.add("rabbit");

        for (String animal : animals) {
            System.out.println(animal);
        }

        Scanner input2 = new Scanner(System.in);
        int test = input2.nextInt();

        for (int i = 0; i < animals.size(); i++) {
            if (test == 2) {
                for (int j = 0; j < i; j++) {
                    System.out.println(animals.get(j));
                    j++;
                }
            }
        }

    }
}

目前,它在for-each循环中核心地输出元素,但是输出我的下一部分代码:fox,fox,fox,dog。 我希望在用户写入2以打印第一个元素之后,用户再次按下它会打印下一个元素,依此类推,直到列表末尾。

3 个答案:

答案 0 :(得分:2)

如果我已经正确地实现了这项任务,你就会有一个动物列表,并希望每次用户按2时逐步输出一个元素:

try (Scanner scan = new Scanner(System.in)) {
    int i = 0;

    while (i < animals.size()) {
        if (scan.nextInt() == 2)
            System.out.println(animals.get(i++));
    }
}

答案 1 :(得分:0)

这部分代码没有做你想要的。我评论了这些线条,向您展示它的作用:

    for (int i = 0; i < animals.size(); i++) { //for each animal
        if (test == 2) { //check if test equals 2
            for (int j = 0; j < i; j++) { //for each animal until the selected one from the first loop
                System.out.println(animals.get(j));  //print is name
                j++; //increase j
            }
        }
    }

首先为什么每次都要进行测试?它的值在循环期间不会改变,你可以先检查一次,然后只检查一次。

你的第一个循环遍历所有动物。

第二个循环从开始经过动物直到从第一个循环中选择的动物。然后显示它的名字。在这个循环中你增加j,但它已经在循环的声明中完成了。所以你经常增加j。

告诉你发生了什么:首先i = 0.然后j = 0,所以j不低于循环停止。第二个i = 1,然后j = 0,所以你打印“狐狸”。然后你增加j并且循环增加j - > J = 2。所以j不低于循环停止。第三个i = 2,j = 0所以你打印“狐狸”。然后你增加j并且循环增加j - > J = 2。所以j不低于循环停止。第四个i = 3,j = 0所以你打印“狐狸”。然后你增加j并且循环增加j - > J = 2。 j低于i所以你再次循环。你打印“狗”。然后你增加j并且循环增加j - > J = 4。所以j不低于循环停止。通过我的循环停止。

我认为用户输入的“代码”是0 - &gt;退出,1-&gt; prev,2-&gt; next。

public class ProbaCuLista {

    public static void main(String[] args) {

        ArrayList<String> animals = new ArrayList<String>();

        Scanner scan = new Scanner(System.in);

        int userInput = 2;
        int index = 0;

        animals.add("fox");
        animals.add("cat");
        animals.add("dog");
        animals.add("rabbit");

        for (String animal : animals) {
            System.out.println(animal);
        }

        while(userInput != 0) {
            userInput = scan.nextInt();

            if(userInput == 2) {
                System.out.println(animals.get(index);
                if(index<animals.size()) {
                    index++;
                 }
            }
            if(userInput == 1) {
                System.out.println(animals.get(index);
                if(index>1) {
                    index--;
                }
            }
        }
    }
}

注意:这是一个解决方案,但有很多,当然还有一些更好的

答案 2 :(得分:0)

我认为以下符合您的要求。

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

public class ProbaCuLista {

    public static void main(String[] args) {

        ArrayList<String> animals = new ArrayList<String>();

        animals.add("fox");
        animals.add("cat");
        animals.add("dog");
        animals.add("rabbit");

        for (String animal : animals) {
            System.out.println(animal);
        }

        Scanner input2 = new Scanner(System.in);
        int test;
        int i=0;
        while(true){
            System.out.println("Enter the Key");
            test = input2.nextInt();
            if(test==2 && i<animals.size()){
                System.out.println(animals.get(i));
                i++;
            }
            else{
                System.out.println("Out of the Loop");
                break;
            }
        }


    }
}