Here's a program we wrote to answer some of the questions at the end: 

import java.util.*; 

public class Mitch {
  public static void main(String[] args) {
    int[][] roy = 
    { {1, 2, 3},
      {4, 5, 6}, 
      {7, 8, 9}
    };
    for (int[] row : roy)
      System.out.println(Arrays.toString(row)); 
    System.out.println("---------------"); 
    Mitch.fun(roy); 
    for (int[] row : roy)
      System.out.println(Arrays.toString(row));     
    System.out.println("---------------"); 
    Mitch.fun(roy); 
    for (int[] row : roy)
      System.out.println(Arrays.toString(row));     
    System.out.println("---------------"); 
    Mitch.nuf(roy); 
    for (int[] row : roy)
      System.out.println(Arrays.toString(row));     
    System.out.println("---------------"); 
  }
  public static void fun(int[][] a) {
    a[1] = Mitch.add(a[1], -2);  
  }
  public static void nuf(int[][] a) {
    a[0] = Mitch.remove(a[0]);  
  }
  public static int[] add(int[] b, int value) {
    int[] c = new int[b.length + 1]; 
    for (int i = 0; i < b.length; i++) {
      c[i] = b[i];  
    }
    c[c.length-1] = value; 
    return c; 
  }
  public static int[] remove(int[] b) {
    if (b == null || b.length == 0) return b; 
    int[] c = new int[b.length - 1]; 
    for (int i = 1; i < b.length; i++) {
      c[i-1] = b[i];  
    }
    return c; 
  }
}​

Here's another one we wrote to set this one up:

import java.util.*; 

public class Mitch {
  public static void main(String[] args) {
    int[] a = { 6, 5, 7, 1 };
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.add(a, 2); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.add(a, -1); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.add(a, 5); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.remove(a); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.remove(a); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.remove(a); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.remove(a); 
    System.out.println( Arrays.toString( a ) ); 
    
  }
  public static int[] add(int[] b, int value) {
    int[] c = new int[b.length + 1]; 
    for (int i = 0; i < b.length; i++) {
      c[i] = b[i];  
    }
    c[c.length-1] = value; 
    return c; 
  }
  public static int[] remove(int[] b) {
    if (b == null || b.length == 0) return b; 
    int[] c = new int[b.length - 1]; 
    for (int i = 1; i < b.length; i++) {
      c[i-1] = b[i];  
    }
    return c; 
  }
  // This is how it runs: 
  // 
  // Welcome to DrJava.  Working directory is C:\Users\earldean\Desktop
  // > run Mitch
  // [6, 5, 7, 1] 
  // [6, 5, 7, 1, 2] 
  // [6, 5, 7, 1, 2, -1] 
  // [6, 5, 7, 1, 2, -1, 5] 
  // [5, 7, 1, 2, -1, 5] 
  // [7, 1, 2, -1, 5] 
  // [1, 2, -1, 5] 
  // [2, -1, 5] 
  // >  
}​

This were I stated my theorem (postulate): 

import java.util.*; 

public class Mitch {
  public static void main(String[] args) {
    int[] a = { 6, 5, 7, 1 };
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.add(a, 2); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.add(a, -1); 
    System.out.println( Arrays.toString( a ) ); 
    a = Mitch.add(a, 5); 
    System.out.println( Arrays.toString( a ) ); 
  }
  public static int[] add(int[] b, int value) {
    int[] c = new int[b.length + 1]; 
    for (int i = 0; i < b.length; i++) {
      c[i] = b[i];  
    }
    c[c.length-1] = value; 
    return c; 
  }
}

// German's postulate (or theorem?):
//     Nobody can change the length of an array passed as a parameter. 

This was the simplest change(s) to make 6.25 (#11) work: 

import java.util.*; 

public class Mitch {
  public static void main(String[] args) {
    double[] a = { 0, 3.141592, 0 }; 
    System.out.println( Arrays.toString( a ) ); 
    Mitch.fillWithRandomNumbers(a);     
    System.out.println( Arrays.toString( a ) ); 
  }
  public static void fillWithRandomNumbers(double[] values) {
    double[] numbers = new double[values.length];
    for (int i = 0; i < numbers.length; i++)
    {
      values[i] = Math.random();  
    }
    // values = numbers;     
  }
}​

That's what we did Thu night. 

Now here's some other code (and notes) we wrote "last week tonight":

  1 4 3 7 _ _ _ _

  for (int i = 0; i < a.length; i++) {
    a[i] = (int) (Math.random() * 100 + 1); 
    for (int j = 0; j < i; j++) {
      if (a[i] == a[j]) {
        i--; 
        break; 
      } 
    } 
  }

import java.util.Arrays; 

class Example {
  public static void main(String[] args) {
    int[] a = new int[10];    
    for (int i = 0; i < a.length; i++) {
      a[i] = (int) (Math.random() * 11 + 1); 
      System.out.println( Arrays.toString ( a ) ); 
      for (int j = 0; j < i; j++) {
        if (a[i] == a[j]) {
          i--; 
          break; 
        } 
      } 
    }
    
  }
}​

Can you figure what it does, where it's useful? 

--