<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">// Project 5. Question 5. Solution
// Cafeteria cleanup simulation (using arrays)
// Date: 25 March 2001
// Author: Rimon Barr

class Complex {
  // input stream
  private static TokenReader in=new TokenReader(System.in);

  // limits on constructor that creates random complex numbers
  private static final int RAND_MIN=-9, RAND_MAX=9;

  private int real, imaginary;

  // construct a random complex number
  public Complex() {
    real=(int)(Math.random()*(RAND_MAX-RAND_MIN+1)+RAND_MIN);
    imaginary=(int)(Math.random()*(RAND_MAX-RAND_MIN+1)+RAND_MIN);
  }

  // construct a complex number with given real and imaginary components
  public Complex(int real, int imaginary) {
    this.real=real;
    this.imaginary=imaginary;
  }

  // return string representation of this complex number
  public String toString() {
    String sReal="", sImaginary="", s="";
    if(real!=0)
      sReal=""+real;
    if(imaginary!=0)
      sImaginary=imaginary+"i";
    if(real!=0 &amp;&amp; imaginary&gt;0)
      s=sReal+"+"+sImaginary;
    else
      s=sReal+sImaginary;
    if(s.equals(""))
      s="0";
    return s;
  }

  // return real component
  public int getReal() { return real; }

  // return imaginary component
  public int getImaginary() { return imaginary; }

  // add given complex number to this one
  public Complex add(Complex c) {
    this.real+=c.getReal();
    this.imaginary+=c.getImaginary();
    return this;
  }

  /*
   * Static methods for demonstration purposes.
   */

  // generate a column-major ragged upper triangular array of random 
  // complex numbers
  public static Complex[][] generateArray(int size) {
    Complex[][] array=new Complex[size][];
    for(int col=0; col&lt;size; col++) {
      array[col]=new Complex[col+1];
      for(int row=0; row&lt;col+1; row++)
        array[col][row]=new Complex();
    }
    return array;
  }

  // add two column-major ragged upper triangular arrays of complex
  // numbers; result replaces first array
  public static void addArrays(Complex[][] a1, Complex[][] a2) {
    for(int col=0; col&lt;a1.length; col++)
      for(int row=0; row&lt;a1[col].length; row++)
        a1[col][row].add(a2[col][row]);
  }

  // print a column-major ragged upper triangular array of complex
  // numbers
  public static void printArray(Complex[][] a) {
    for(int row=0; row&lt;a.length; row++) {
      for(int col=0; col&lt;a.length; col++) {
        if(row&lt;=col)
          System.out.print(a[col][row]);
        System.out.print("\t");
      }
      System.out.println();
    }
  }

  public static void main(String args[]) {
    while(true) {
      System.out.print("Please enter positive number for array size: ");
      int size=in.readInt();
      if(size&lt;=0) break;
      Complex[][] a1=generateArray(size), a2=generateArray(size);
      System.out.println("First array:");
      printArray(a1);
      System.out.println("Second array:");
      printArray(a2);
      System.out.println("Sum:");
      addArrays(a1, a2);
      printArray(a1);
    }
  }
}

</pre></body></html>