如何打印不属于连续四个值序列的ArrayList的最后一个值?

时间:2017-03-08 02:52:17

标签: java arraylist

我是Java的初学者。我想知道如何打印这个反向arrayList的最后几个值,因为它们不是4的连续序列的一部分。我正在考虑使用if (numbers.size()%4==0),但我不知道在哪里正确实现它。

    import java.util.*;
    public class printArray {

    public static void main(String[] args) {
        ArrayList <Integer> numbers= new ArrayList<>();
        numbers.add(10);
        numbers.add(13);
        numbers.add(2);
        numbers.add(8);
        numbers.add(7);
        numbers.add(90);
        numbers.add(-1);
        numbers.add(2);
        numbers.add(4);
        numbers.add(5);




        System.out.println(numbers);

        System.out.println(reverse4(numbers));

    }
    public static ArrayList<Integer> reverse4 (ArrayList<Integer> numbers){
        ArrayList< Integer> reverseSet= new ArrayList<>();
            for (int i = 0; i < numbers.size(); i += 4) {//goes from 0 to 4, 4 to 8 and keeps incrementing by 4
                for (int k = i + 3; k >= i ; k--)// reverse order, executes 4 times before going to the outer loop
             reverseSet.add(numbers.get(k));


        }

        return reverseSet;  

    }
}

2 个答案:

答案 0 :(得分:3)

您可以检查k是否在范围内

if (k < numbers.size())

在执行reverseSet.add()

之前

编辑:抱歉,误解了你在做什么。你想要反转任何完整的四组,但不是最后的任何部分组,听起来像。

所以,数:

position |   1      2      3      4   |  5      6      7
---------+----------------------------+--------------------
count    | size-7 size-6 size-5 size-4|size-3 size-2 size-1
            last
            one

position |   1      2      3      4   |  5      6
---------+----------------------------+--------------------
count    | size-6 size-5 size-4 size-3|size-2 size-1
            last
            one

position |   1      2      3      4   |  5
---------+----------------------------+--------------------
count    | size-5 size-4 size-3 size-2|size-1
            last
            one

position |   1      2      3      4   |
---------+----------------------------+--------------------
count    | size-4 size-3 size-2 size-1|
            last
            one

看起来i的最后一个有效值应始终小于数组的大小减去三(除非ArrayList太短,但你需要不同的代码 - 我以前的答案应该在那里工作)。因此,请将i < numbers.size()替换为 i < numbers.size() - 3 ,而不是我上面所说的。

答案 1 :(得分:0)

以下是更改后的reverse4方法:

public static ArrayList<Integer> reverse4(ArrayList<Integer> numbers) {
        ArrayList<Integer> reverseSet = new ArrayList<>();
        for (int i = 0; i < numbers.size(); i += 4) {
            if (i + 3 < numbers.size()) { // check if remaining number of elements less than 4
                for (int k = i + 3; k >= i; k--)
                    reverseSet.add(numbers.get(k));

            } else {
                for (int k = i; k < numbers.size(); k++) {
                    reverseSet.add(numbers.get(k));   // add the remaining elements without reversing
                }
            }
        }

        return reverseSet;

    }

请注意检查列表是否有剩余4个元素的新条件。