// PakkaTesti.java // testaus X3:n pakalle import java.util.Random; public class PakkaTest { public static void main(String[] args) { int N = 10; if (args.length > 0) N = Integer.valueOf(args[0]); Random R = new Random(N); // vaihda traI_16_X3 tilalle oma tunnus (luokan nimi) // samoin alla lomituslajitteluun Pakka omapakka = new traI_16_X3(); for (int i = 0; i < N; i++) { omapakka.lisaaLoppuun(R.nextInt(N)); } // lomituslajittelu sahaa pakkaa melkoisesti: // jos toteutat pakalle toString():n niin näet sisällön System.out.println("Alkuperainen:" + omapakka); lajittele(omapakka); System.out.println("Lajiteltu: " + omapakka); // lisätään-poistetaan jonona for (int i = 0; i < N*100; i++) { omapakka.poistaAlusta(); omapakka.lisaaLoppuun(i); } System.out.println("Lisätään-poistetaan: " + omapakka); // lisätään-poistetaan jonona takaperin for (int i = 0; i < N*100; i++) { omapakka.poistaLopusta(); omapakka.lisaaAlkuun(i); } System.out.println("Lisätään-poistetaan: " + omapakka); // lisätään paljon try { for (int i = 0; i < N*100; i++) { omapakka.lisaaLoppuun(i); } } catch (Exception e) { System.err.println("Lisätessä: " + e.getMessage()); } // poistetaan paljon try { for (int i = 0; i < N*100; i++) { omapakka.poistaAlusta(); } } catch (Exception e) { System.err.println("Poistettaessa: " + e.getMessage()); } System.out.println("Paljojen jälkeen: " + omapakka); // tyhjennetään loput while (! omapakka.onkoTyhja()) { omapakka.poistaAlusta(); } // testataan vielätoisinpäin for (int i = 0; i < N; i++) { omapakka.lisaaAlkuun(R.nextInt(N)); } // tyhjennetään loput while (! omapakka.onkoTyhja()) { omapakka.poistaLopusta(); } } // main() // pakan lajittelu lomituslajittelulla // nämä voisi parametroida niin kääntäjä ei herjailisi vertailun cast:istä... public static void lajittele(Pakka L) { Pakka L1 = new traI_16_X3(); // vaihda tähän oman pakkatoteutuksen luokan nimi Pakka L2 = new traI_16_X3(); jaaKahtia(L, L1, L2); if (! L1.onkoTyhja() && ! L2.onkoTyhja()) { lajittele(L1); lajittele(L2); } lomita(L, L1, L2); } // lajittele() // L:n sisalto jaetaan kahteen tyhjaan pakkaon L1 ja L2 public static void jaaKahtia(Pakka L, Pakka L1, Pakka L2) { while (! L.onkoTyhja()) { L1.lisaaLoppuun(L.poistaAlusta()); if (! L.onkoTyhja()) L2.lisaaLoppuun(L.poistaAlusta()); } } // jaaKahtia() public static void lomita(Pakka L, Pakka L1, Pakka L2) { while (!L1.onkoTyhja() || !L2.onkoTyhja()) { if ( L1.onkoTyhja() || ((!L2.onkoTyhja()) && ((Comparable)(L1.alku())).compareTo(L2.alku()) > 0) ) { L.lisaaLoppuun(L2.poistaAlusta()); } else { L.lisaaLoppuun(L1.poistaAlusta()); } } } // lomita() } // class PakkaTesti