// ListsAreLists.java
//  week09 code
//  Isn't it annoying that we have to make TWO methods to print out lists --
//  one for ArrayLists and one for LinkedLists?
//  Well, it turns out that we don't!
// See also SillyDuplication.java

import java.util.Scanner;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListsAreLists {

    // this method prints a List, 8 elements per line
    //  NOTE: the body is exactly the same as printArrayList
    //        and printLinkedList from SillyDuplication.java
    public static void printList(List<Integer> list) {
        int perLine = 8;
        int count = 0;
        for (int num : list) {
            if (count % perLine == 0) {
                System.out.println();
            }
            System.out.print("\t" + num);
            count++;
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Scanner kbd = new Scanner(System.in);

        ArrayList<Integer> aList = new ArrayList<>();
        LinkedList<Integer> lList = new LinkedList<>();
        for (int i = 1; i < 30; i++) {
            aList.add(i * i + 7 * i - 12);
            lList.add(i * i - 3 * i + 42);
        }

        System.out.println("\nHere is my ArrayList:");
        printList(aList);
        System.out.println("\nHere is my LinkedList:");
        printList(lList);
        System.out.print("\nPress Enter...");
        kbd.nextLine();
        System.out.println();

        List<Integer> listA = new ArrayList<>();
        List<Integer> listL = new LinkedList<>();
        for (int i = 1; i < 30; i++) {
            listA.add(i * i + 4 * i - 7);
            listL.add(i * i - 9 * i + 42);
        }

        System.out.println("\nHere is my List that's an ArrayList:");
        printList(listA);
        System.out.println("\nHere is my List that's a LinkedList:");
        printList(listL);
        System.out.print("\nPress Enter...");
        kbd.nextLine();
        System.out.println();

        // Lists must be ArrayLists or LinkedLists (or some other List class)
        // List<Integer> nope = new List<>();
    }

}
