public class Wednesday {
  public static void main(String[] args) {
    int[][] a = 
    { 
      {1, 2}, 
      {3, 4, 5, 6, 7},
      {8, 9, 10}
    };
    System.out.println( Wednesday.deppToString(a) ); 
  }
  public static String deppToString(int[][] a) {
    String answer = ""; 
    for (int[] row : a) {
      if (answer.equals("")) 
        answer = answer + "[\n  " + java.util.Arrays.toString(row); 
      else 
        answer = answer + "\n  " + java.util.Arrays.toString(row); 
    }
    return answer + "\n]";
  }
}

This is how this runs:

Welcome to DrJava.  Working directory is C:\Users\soicloan\Desktop
> run Wednesday
[
  [1, 2]
  [3, 4, 5, 6, 7]
  [8, 9, 10]
]


Now what about java.util.Arrays.deepToString(Object[] a)?

Attendance: 

Team 5: Kyle Palmer, Charutha, Ryan, Timothy, Yaodong, Cheng
Team 4: Elissa, Wenhao, Jacob, Ruifeng, Hassan
Team 3: Jing, Viena, Esteban, Topher, Eduardo 
Team 2: Nanjie, Alex, Griffin, Marc, Ross, Seth, Mike 
Team 1: Mange, Yutong, Miguel, Madison, Sean, Young, Andrew 
Team 8: Tristen, Caleb, Baojie, Shengnan, Adel, Sam 
Team 7: Vinoth, Lin, Ben, Tyler, Thomas, Cynthia, Dian 
Team 6: Jackson, Manasee, Jacob, Ryan 


public class Wednesday {
  public static void main(String[] args) {
    int[] [] a = 
    { 
      {1, 2}, 
      {3, 4, 5, 6, 7},
      {8, 9, 10}
    };
    System.out.println( java.util.Arrays.deepToString(a) ); 
  }
  public static String deppToString(int[][] a) {
    String answer = ""; 
    for (int[] row : a) {
      if (answer.equals("")) 
        answer = answer + "[\n  " + java.util.Arrays.toString(row); 
      else 
        answer = answer + "\n  " + java.util.Arrays.toString(row); 
    }
    return answer + "\n]";
  }
}


Welcome to DrJava.  Working directory is C:\Users\soicloan\Desktop
> run Wednesday
[[1, 2], [3, 4, 5, 6, 7], [8, 9, 10]]
> int[][] m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
> m
{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }


Challenge: implement magic square with array lists.

We can start like this:

import java.util.ArrayList; 

public class Two {
  public static void main(String[] args) {
    // int[][] m = new int[3][3];
    ArrayList<ArrayList<Integer>> m = new ArrayList<ArrayList<Integer>>();
    System.out.println( m );
    ArrayList<Integer> row = new ArrayList<Integer>(); 
    row.add(1);
    row.add(2); 
    m.add(row);
    System.out.println( m ); 
    row = new ArrayList<Integer>(); 
    row.add(3); 
    row.add(4);
    row.add(5);
    row.add(6);
    row.add(7);
    m.add(row); 
    System.out.println( m ); 
    row = new ArrayList<Integer>(); 
    row.add(8); 
    row.add(9);
    row.add(10);
    m.add(row); 
    System.out.println( m ); 
  }
}

import java.util.Scanner; 

public class Eduardo {
  public static void main(String[] args) {
    // System.out.println( args[0] ); 
    Scanner in = new Scanner(System.in); 
    System.out.print("What's the size: ");     
    int size = Integer.parseInt( in.nextLine() ); // args[0] ); 
    int[][] a = new int[size][size]; 
    System.out.println( a ); 
    for (int[] r : a)
      System.out.println( java.util.Arrays.toString( r ) );
    int number = 1, row = size - 1, col = size/2; 
    ...

Now let's do an exercise with Singleton pattern and Voter objects: 

abstract class Voter {
  abstract String vote();
}

class Timothy extends Voter {
  String vote() {
    return "Donald Trump";  
  }
}

class Jackson extends Voter {
  String vote() { return "Jill Stein"; }  
}

Create an array of Voter objects, place a Timothy and a Jackson in it. 

Ask them to vote. 

--