|
I will illustrate this with an example...
(I have highlighted the changes made to the original program in red):
public class SortingTools { public static void SelectionSort(BankAccount[] a) { BankAccount help; // helper variable for 3-way exchange int i, j, min_j; // Array indices /* --------------------------------------------------- The selection sort algorithm --------------------------------------------------- */ for ( i = 0 ; i < a.length ; i ++ ) { /* --------------------------------------------------- Find array element with min. value among a[i], a[i+1], ..., a[n-1] --------------------------------------------------- */ min_j = i; // Assume elem i (a[i]) is the minimum for ( j = i+1 ; j < a.length ; j++ ) { if ( a[j].getBalance() < a[min_j].getBalance() ) { min_j = j; // We found a smaller minimum, update min_j } } /* --------------------------------------------------- Swap a[i] and a[min_j] --------------------------------------------------- */ help = a[i]; a[i] = a[min_j]; a[min_j] = help; } } } |
This selection sort method will sort BankAccount object by their balance values
public class BankAccount { private int accNum; // Private access private String name; // -- accessible ONLY inside private double balance; // -- the class "BankAccount" /* ==================================================== Constructor 1: initialize all 3 instance variables ==================================================== */ public BankAccount(int a, String n, double amount) { accNum = a; name = n; balance = amount; } /* ============================================== getBalance(): return balance in BankAccount ============================================== */ public double getBalance() { return balance; } .... } |
(Note: such a method should be written in the BankAccount class when we discuss classes.
I omitted it before for brevity....)
public class SortBal1 { public static void main(String[] args) { BankAccount[] a = new BankAccount[4]; // 4 BankAccount ref. vars a[0] = new BankAccount(343, "John", 2000.0); a[1] = new BankAccount(123, "Mary", 1000.0); a[2] = new BankAccount(541, "Kate", 5000.0); a[3] = new BankAccount(224, "Adam", 3000.0); int i; /* --------------------------------------------------- Print array before sorting --------------------------------------------------- */ for ( i = 0 ; i < a.length ; i++ ) { System.out.println( a[i] ); } SortingTools.SelectionSort(a); // Sort the BankAccount array "a" System.out.println( "Array after Selection Sort:"); /* --------------------------------------------------- Print array after sorting --------------------------------------------------- */ for ( i = 0 ; i < a.length ; i++ ) { System.out.println( a[i] ); } } } |
Output:
Account number: 343, Name: John, Balance: 2000.0 Account number: 123, Name: Mary, Balance: 1000.0 Account number: 541, Name: Kate, Balance: 5000.0 Account number: 224, Name: Adam, Balance: 3000.0 Array after Selection Sort: Account number: 123, Name: Mary, Balance: 1000.0 Account number: 343, Name: John, Balance: 2000.0 Account number: 224, Name: Adam, Balance: 3000.0 Account number: 541, Name: Kate, Balance: 5000.0 |
How to run the program:
|
public class SortBal2 { public static void main(String[] args) { CheckingAccount[] a = new CheckingAccount[4]; a[0] = new CheckingAccount(343, "John", 2000.0); a[1] = new CheckingAccount(123, "Mary", 1000.0); a[2] = new CheckingAccount(541, "Kate", 5000.0); a[3] = new CheckingAccount(224, "Adam", 3000.0); int i; /* --------------------------------------------------- Print array before sorting --------------------------------------------------- */ for ( i = 0 ; i < a.length ; i++ ) { System.out.println( a[i] ); } SortingTools.SelectionSort(a); // a is now of a different type !!! System.out.println( "Array after Selection Sort:"); /* --------------------------------------------------- Print array after sorting --------------------------------------------------- */ for ( i = 0 ; i < a.length ; i++ ) { System.out.println( a[i] ); } } } |
Facts:
|
How to run the program:
|
public class CheckingAccount // NO: extends BankAccount !!! { // NO relationship with BankAccount private int accNum; // Private access private String name; // -- accessible ONLY inside private double balance; // -- the class "BankAccount" /* ---------------------------------------------- Constructor: CheckingAccount(a, n, amount) ---------------------------------------------- */ public CheckingAccount(int a, String n, double amount) { accNum = a; name = n; balance = amount; } /* ============================================== getBalance(): return balance in BankAccount ============================================== */ public double getBalance() { return balance; } ... } |
public class SortBal2 { public static void main(String[] args) { CheckingAccount[] a = new CheckingAccount[4]; a[0] = new CheckingAccount(343, "John", 2000.0); a[1] = new CheckingAccount(123, "Mary", 1000.0); a[2] = new CheckingAccount(541, "Kate", 5000.0); a[3] = new CheckingAccount(224, "Adam", 3000.0); int i; /* --------------------------------------------------- Print array before sorting --------------------------------------------------- */ for ( i = 0 ; i < a.length ; i++ ) { System.out.println( a[i] ); } SortingTools.SelectionSort(a); System.out.println( "Array after Selection Sort:"); /* --------------------------------------------------- Print array after sorting --------------------------------------------------- */ for ( i = 0 ; i < a.length ; i++ ) { System.out.println( a[i] ); } } } |
You will get a compile error:
> javac SortBal2.java SortBal2.java:23: SelectionSort(BankAccount[]) in SortingTools cannot be applied to (CheckingAccount[]) SortingTools.SelectionSort(a); |
How to run the program:
|