1
|
|
|
|
2.1
|
Heltal.java |
public class Heltal implements Comparable {
private int tal;
public Heltal( int tal ) {
this.tal = tal;
}
public int compareTo( Object obj ) {
if ( obj instanceof Heltal ) {
Heltal other = (Heltal) obj;
if ( tal < other.tal )
return -1;
else if ( tal > other.tal )
return 1;
else
return 0;
} else
return -1;
}
public String toString() {
return "" + tal;
}
} |
|
|
| Bemærk at compareTo-metoden
anvender operatoren: instanceof,
til at skelne instanser af Heltal fra andre objekter.
|
|
Main.java |
import java.util.*;
public class Main {
public static void main( String[] argv ) {
int[] tal = { 5, 8, 3, 6, 2, 9, 7, 1, 0, 2 };
Heltal[] array = new Heltal[ tal.length ];
for ( int i=0; i<tal.length; i++ )
array[i] = new Heltal( tal[i] );
Arrays.sort( array );
for ( int i=0; i<array.length; i++ )
System.out.print( array[i] + " " );
System.out.println();
int findes = Arrays.binarySearch( array, new Heltal( 3 ) );
System.out.println( findes );
int ikke = Arrays.binarySearch( array, new Heltal( 4 ) );
System.out.println( ikke );
}
} |
|
|
|
|
|
2.2
|
VorComparator.java |
import java.util.*;
public class VorComparator implements Comparator {
public int compare( Object obj1, Object obj2 ) {
if ( obj1 instanceof Heltal && obj2 instanceof Heltal )
return ((Heltal) obj1).compareTo( obj2 );
else if ( obj1 instanceof String && obj2 instanceof String )
return ((String) obj1).compareTo( obj2 );
else if ( obj1 instanceof String && obj2 instanceof Heltal )
return 1;
else
return -1;
}
} |
|
|
| Her deler if-sætningerne
i de tre situationer, der er beskrevet i opgaven. Det bemærkes,
at den afsluttende else ikke alene håndterer, at en eller flere af objekterne ikke er en
instans af Heltal/String,
men også tager sig af den situation; hvor første parameter
er et Heltal og
anden parameter er en String.
|
| Det bemærkes ligeledes, at vi ikke behøver tilgå
datakernen i hverken Heltal eller String, idet
vi udnytter, at begge klasser implementerer Comparable-interfacet.
|
| Endelig har vi en testanvendelse:
|
|
Main.java |
import java.util.*;
public class Main {
public static void main( String[] argv ) {
int[] tal = { 5, 8, 3, 6, 2 };
String[] text = { "Ikast", "Silkeborg", "Herning", "Viborg", "Holstebro" };
Object[] array = new Object[ tal.length + text.length ];
int pos=0;
for ( int i=0; i<text.length; i++ )
array[pos++] = text[i];
for ( int i=0; i<tal.length; i++ )
array[pos++] = new Heltal( tal[i] );
Arrays.sort( array, new VorComparator() );
for ( int i=0; i<array.length; i++ )
System.out.print( array[i] + " " );
System.out.println();
}
} |
|
2 3 5 6 8 Herning Holstebro Ikast Silkeborg Viborg |
|
|
| Bemærk, at vi som udgangspunkt placerer tekststrengene først
i array'et, for at udfordre VorComparator's
evne til at håndtere ordningen mellem Heltal og String's.
|
| |