Ordered Array

Ordered Array

The program that makes use of the Person class is similar to the Hight Array that stored items of type int. Only a few changes are necessaryto adapt that program to handle Person objects.

$ dart 01_array/class_data.dart
import 'dart:io';

class Person {
  String firstName;
  String lastName;
  int age;

  // Constructor shorthand
  Person(this.lastName, this.firstName, this.age) {}

  void displayPerson() {
    stdout.write('Last Name $lastName, ');
    stdout.write('First Name $firstName, ');
    stdout.writeln('Age $age');
  }

  String getLastName() {
    return lastName;
  }
}

class DataArray {
  List<Person> a; // reference to array
  int nElems; // number of data items

  // Constructor
  DataArray(int max) {
    a = new List<Person>(max); // create array (List in Dart)
    nElems = 0; // initialize items count
  }

  /// Find specified value (Liner search)
  Person find(String searchName) {
    int j;
    // for each element
    for(j = 0; j < nElems; j++) {
      if(a[j].getLastName() == searchName) {
        break; // exit loop before end
      }
    }
    if(j == nElems) {
      return null; // can't find it
    } else {
      return a[j]; // found it
    }
  }

  /// Insert Data to Array
  void insert(String lastName, String firstName, int age) {
    a[nElems] = new Person(lastName, firstName, age);
    nElems ++; // increment size
  }

  /// Delete person from array
  bool delete(String searchName) {
    int j;
    for(j = 0; j < nElems; j++) {
      if (a[j].getLastName() == searchName) {
        break;
      }
    }
    if (j == nElems) {
      return false;
    } else {
      // shift down
      for (int k = j; k < nElems; k ++) {
        a[k] = a[k + 1];
      }
    }
    nElems --; // decrement size
    return true;
  }

  /// Display array contents
  void display() {
    for(int j = 0; j < nElems; j++) {
      a[j].displayPerson();
    }
  }
}

void main() {
  int maxSize = 100; // array size
  DataArray array = new DataArray(maxSize); // create instance of DataArray

  // Insert 10 items
  array.insert('Evans', 'Patty', 24);
  array.insert('Smith', 'Lorraine', 37);
  array.insert('Yee', 'Tom', 43);
  array.insert('Adams', 'Henry', 63);
  array.insert('Hashimoto', 'Sato', 21);
  array.insert('Stimson', 'Henry', 29);
  array.insert('Velasquez', 'Jose', 72);
  array.insert('Lamarque', 'Henry', 54);
  array.insert('Vang', 'Minh', 22);
  array.insert('Creswell', 'Lucinda', 18);

  // Display items
  array.display();

  // Search item
  String searchKey = 'Stimson';
  Person found = array.find(searchKey);

  if (found != null) {
    stdout.write('Found');
    found.displayPerson();
  } else {
    stdout.writeln("Can't find Person with key = $searchKey");
  }

  // Delete 3 items
  stdout.writeln('Deleting Smith, Yee, and Creswell');
  array.delete('Smith');
  array.delete('Yee');
  array.delete('Creswell');

  // Display
  array.display();
}