I am new to java and while trying to solve a prompt I ran into an issue which I couldn't find an answer to possibly due to my lack of understanding of the nature of the problem. I have an ArrayList consisting of integers nested within another ArrayList. I can update my temporary list outside of the loop in the very same manner but not within the loop. When I print mainList I receive an empty ArrayList within mainList for every integer input.
import java.util.*;
public class Lock {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<ArrayList<Integer>> mainList = new ArrayList<>();
ArrayList<Integer> tempList = new ArrayList<>();
while(input.hasNextInt()) {
for (int i = 0; i < 4; i ) {
int n = input.nextInt();
tempList.add(n);
}
mainList.add(tempList);
tempList.clear();
}
System.out.println(mainList);
input.close();
int angleSum;
for (ArrayList<Integer> integers : mainList) {
//2 clockwise turns
angleSum = 0;
angleSum = angleSum 720;
//init values within nested <Int> ArrayLists
int val1 = integers.get(0);
int val2 = integers.get(1);
int val3 = integers.get(2);
int val4 = integers.get(3);
//Continue until first number in Combination
angleSum = angleSum (9 * Math.abs(val1 - val2));
//CounterClockwise turn
angleSum = angleSum 360;
//Counter Clockwise until val3
angleSum = angleSum (360 - (9 * (39 - Math.abs(val2 - val3))));
//Clockwise until val4
angleSum = angleSum (9 * Math.abs(val3 - val4));
System.out.println(angleSum);
}
}
}
CodePudding user response:
When you call clear()
on tempList
, you remove the contents on the instance of the list that you have just added to the mainList
.
You have to create new instance instead so that existing items in mainList
are not affected:
// tempList.clear(); //! wrong
tempList = new ArrayList<>();