Reputation: 35
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
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
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