Naim Kabir
Naim Kabir

Reputation: 35

How do I print the last values of an ArrayList that aren't part of a successive sequence of four values?

I am a beginner in Java. I was wondering how I would print the last couple of values for this reverse arrayList since they are not part of a successive sequence of 4. I was thinking of using if (numbers.size()%4==0) but I dont know where to properly implement it.


    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;  

    }
}

Upvotes: 1

Views: 66

Answers (2)

Mathieu K.
Mathieu K.

Reputation: 293

You could check if k is within range

if (k < numbers.size())

before you do the reverseSet.add().

Edit: sorry, misunderstood what you're doing. You want to reverse any full sets of four, but not any partial sets at the end, it sounds like.

So, count:

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

It looks like the last valid value of i should always be less than the size of the array minus three (unless the ArrayList is too short, but you'd need different code for that—my previous answer should work there). So instead of what I said above, replace i < numbers.size() with i < numbers.size() - 3.

Upvotes: 3

mjlowky
mjlowky

Reputation: 1223

Here is the changed reverse4 method :

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;

    }

Note the new conditions to check if the list has 4 remaining elements.

Upvotes: 0

Related Questions