Avatar billede adagio Nybegynder
20. september 2003 - 12:12 Der er 25 kommentarer og
2 løsninger

Problemer med kompilering

Jeg har følgende klasser:

http://zcollection.sytes.net/files/Prog.zip

I zip filen findes der flere klasser, hvoraf alle undtagen 1 er uploaded af min programmerings lærer. Den sidste (InsertSort.java) er en jeg selv har lavet.

Problemet er at jeg ikke kan kompilere den fil (Den klager over at den ikke kan finde de andre klasser, som den skal bruge)

Jeg kan ikke vente til på mandag med at finde ud af hvad det er galt.
Avatar billede erikjacobsen Ekspert
20. september 2003 - 12:18 #1
Hvordan oversætter du? Det virker tilsyneladende.

Din linie med

insertSort(double v []);

skal nok være

insertSort(data);
Avatar billede adagio Nybegynder
20. september 2003 - 12:24 #2
Virker det på din computer?
Avatar billede adagio Nybegynder
20. september 2003 - 12:25 #3
Nå ja, den der fejl har jeg ikke set endnu. Men det gør stadig ingen forskel på selve problemet, men takker for lige at minde mig om det lille problem der
Avatar billede adagio Nybegynder
20. september 2003 - 12:26 #4
Jeg bruger JCreator
Avatar billede arne_v Ekspert
20. september 2003 - 12:28 #5
Der er 3 problemer med InsertSort.java:

1)  Der mangler et "t" i class navnet (for at matche filnavnet)

2)  Du skal ikke have nogen type (void) på constructor

3)  Den som Erik har nævnt
Avatar billede erikjacobsen Ekspert
20. september 2003 - 12:29 #6
Jeg kender ikke JCreator. Men det kunne være din CLASSPATH ikke indeholder "."
Avatar billede arne_v Ekspert
20. september 2003 - 12:29 #7
Med de rettelser så compiler det hos mig.
Avatar billede adagio Nybegynder
20. september 2003 - 12:33 #8
Ahh, takker, nu virker det. Vis du ligger et svar, skal du nok få dine point :o)
Avatar billede erikjacobsen Ekspert
20. september 2003 - 12:35 #9
Kan den så også sortere ... ;) ?
Avatar billede adagio Nybegynder
20. september 2003 - 12:40 #10
Det med at sortere det er så den anden side af sagen, men indgår ikke i dette spørgsmål :o)

Hvordan skal jeg ligge pointene?

Jeg har tænkt mig sådan:

Erik får 10 (1/3 af problemerne)
Arne får 20 (2/3 af problemerne)

Eller hvad synes i?
Avatar billede erikjacobsen Ekspert
20. september 2003 - 12:43 #11
Hvad du synes.

Men det med sortering kan vi muligvis også klare ... ;))
Avatar billede arne_v Ekspert
20. september 2003 - 12:45 #12
Hvis jeg skal have point må jeg hellere ligge et svar !

:-)
Avatar billede adagio Nybegynder
20. september 2003 - 12:47 #13
Du mener at jeg lader spørgsmålet stå åbent i tilfælde af flere problemer?

Det med sorteringen skulle ikke være så meget af et problem, da vores opgave ikke går ud på at lave selve sorterings algoritmen, vi skal kun lave en graf over hastigheder i de forskellige algoritmer (InsertSort, SelectionSort, BubbleSort, HeapSort, QuickSort og MergeSort), vi skulle så bare finde disse class filer på nettet, som vi så skulle bruge i vores opgave
Avatar billede erikjacobsen Ekspert
20. september 2003 - 12:49 #14
du gør bare med spørgsmålet som du synes.

Ok, men så skulle det jo være lige til at skrive af fra lærebogen.
Avatar billede arne_v Ekspert
20. september 2003 - 12:55 #15
Hvis du mangler kode, så har jeg ihvertfald Quick Sort og Heap Sort kode
liggende.
Avatar billede adagio Nybegynder
20. september 2003 - 13:00 #16
Du er velkommen til at sende det, hvis du har lyst


Er lige kommet i vanskeligheder igen. Jeg har lavet en ny klasse "Tester", og har startet koden sådan her:

import java.awt.*;

public class Tester extends Frame
{
    private GraphMaker graf = new GraphMaker(5000, 1000);

Resten af koden er bare om at oprette en frame og vise den,
men den har problemer med at finde GraphMaker.class
Avatar billede adagio Nybegynder
20. september 2003 - 13:01 #17
Doh, nevermind, har fundet problemet...
Avatar billede arne_v Ekspert
20. september 2003 - 13:22 #18
import java.util.Arrays;

public class SortTest {
  private final static int N = 1000000;
  public static void main(String[] args) {
      int[] ia = new int[N];
      Integer[] ioa = new Integer[N];
      for (int i = 0; i < N; i++) {
        ia[i] = (int) (Math.random() * N);
        ioa[i] = new Integer(ia[i]);
      }
      test1((int[]) ia.clone());
        test2((int[]) ia.clone());
        test3((int[]) ia.clone());
        test4((Integer[]) ioa.clone());
        test5((Integer[]) ioa.clone());
      test6((Integer[]) ioa.clone());
  }
  public static void test1(int[] ia) {
      long t1 = System.currentTimeMillis();
      qsint(ia);
      long t2 = System.currentTimeMillis();
      for (int i = 0; i < 10; i++)
        System.out.print(" " + ia[i]);
      System.out.println();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ia[N-10+i]);
        System.out.println();
      System.out.println("int homemade QS : " + (t2 - t1));
      return;
  }
    public static void test2(int[] ia) {
        long t1 = System.currentTimeMillis();
        hsint(ia);
        long t2 = System.currentTimeMillis();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ia[i]);
        System.out.println();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ia[N-10+i]);
        System.out.println();
        System.out.println("int homemade HS : " + (t2 - t1));
        return;
    }
  public static void test3(int[] ia) {
      long t1 = System.currentTimeMillis();
      Arrays.sort(ia);
      long t2 = System.currentTimeMillis();
      for (int i = 0; i < 10; i++)
        System.out.print(" " + ia[i]);
      System.out.println();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ia[N-10+i]);
        System.out.println();
      System.out.println("int Java builtin sort: " + (t2 - t1));
      return;
  }
  public static void test4(Integer[] ioa) {
      long t1 = System.currentTimeMillis();
      qsobj(ioa);
      long t2 = System.currentTimeMillis();
      for (int i = 0; i < 10; i++)
        System.out.print(" " + ioa[i]);
      System.out.println();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ioa[N-10+i]);
        System.out.println();
      System.out.println("Integer homemade QS : " + (t2 - t1));
      return;
  }
    public static void test5(Integer[] ioa) {
        long t1 = System.currentTimeMillis();
        hsobj(ioa);
        long t2 = System.currentTimeMillis();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ioa[i]);
        System.out.println();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ioa[N-10+i]);
        System.out.println();
        System.out.println("Integer homemade HS : " + (t2 - t1));
        return;
    }
  public static void test6(Integer[] ioa) {
      long t1 = System.currentTimeMillis();
      Arrays.sort(ioa);
      long t2 = System.currentTimeMillis();
      for (int i = 0; i < 10; i++)
        System.out.print(" " + ioa[i]);
      System.out.println();
        for (int i = 0; i < 10; i++)
            System.out.print(" " + ioa[N-10+i]);
        System.out.println();
      System.out.println("Integer Java builtin sort : " + (t2 - t1));
      return;
  }
  private static void qsint_help(int n1, int n2, int[] ia) {
      int tmp;
      int l = n1;
      int r = n2;
      int pivot = ia[(n1 + n2) / 2];
      do {
        while (ia[l] < pivot)
            l++;
        while (ia[r] > pivot)
            r--;
        if (l <= r) {
            tmp = ia[l];
            ia[l] = ia[r];
            ia[r] = tmp;
            l++;
            r--;
        }
      }
      while (l <= r);
      if (n1 < r)
        qsint_help(n1, r, ia);
      if (l < n2)
        qsint_help(l, n2, ia);
      return;
  }
  private static void qsint(int[] ia) {
      qsint_help(0, ia.length - 1, ia);
      return;
  }
  private static void qsobj_help(int n1, int n2, Comparable[] oa) {
      Comparable tmp;
      int l = n1;
      int r = n2;
      Comparable pivot = oa[(n1 + n2) / 2];
      do {
        while (oa[l].compareTo(pivot) < 0)
            l++;
        while (oa[r].compareTo(pivot) > 0)
            r--;
        if (l <= r) {
            tmp = oa[l];
            oa[l] = oa[r];
            oa[r] = tmp;
            l++;
            r--;
        }
      }
      while (l <= r);
      if (n1 < r)
        qsobj_help(n1, r, oa);
      if (l < n2)
        qsobj_help(l, n2, oa);
      return;
  }
  private static void qsobj(Comparable[] oa) {
      qsobj_help(0, oa.length - 1, oa);
      return;
  }
  private static void hsint_help(int[] ia, int ix, int n) {
      int p = ix;
      int tmp = ia[p - 1];
      int c = 2 * p;
      boolean found = false;
      while ((c <= n) && !found) {
        if ((c < n) && (ia[c] > ia[c - 1])) {
            c++;
        }
        if (ia[c - 1] > tmp) {
            ia[p - 1] = ia[c - 1];
            p = c;
            c = 2 * p;
        } else {
            found = true;
        }
      }
      ia[p - 1] = tmp;
        return;
  }
    private static void hsint(int[] ia) {
        int ix1 = ia.length / 2;
        while(ix1 > 0) {
            hsint_help(ia, ix1, ia.length);
            ix1--;
        }
        int ix2 = ia.length;
        int tmp;
        while(ix2 > 1) {
            tmp = ia[0];
            ia[0] = ia[ix2 - 1];
            ia[ix2 - 1] = tmp;
            ix2--;
            hsint_help(ia, 1, ix2);
        }
        return;
    }
    private static void hsobj_help(Comparable[] oa, int ix, int n) {
        int p = ix;
        Comparable tmp = oa[p - 1];
        int c = 2 * p;
        boolean found = false;
        while ((c <= n) && !found) {
            if ((c < n) && (oa[c].compareTo(oa[c - 1]) > 0)) {
                c++;
            }
            if (oa[c - 1].compareTo(tmp) > 0) {
                oa[p - 1] = oa[c - 1];
                p = c;
                c = 2 * p;
            } else {
                found = true;
            }
        }
        oa[p - 1] = tmp;
        return;
    }
    private static void hsobj(Comparable[] oa) {
        int ix1 = oa.length / 2;
        while(ix1 > 0) {
            hsobj_help(oa, ix1, oa.length);
            ix1--;
        }
        int ix2 = oa.length;
        Comparable tmp;
        while(ix2 > 1) {
            tmp = oa[0];
            oa[0] = oa[ix2 - 1];
            oa[ix2 - 1] = tmp;
            ix2--;
            hsobj_help(oa, 1, ix2);
        }
        return;
    }
}
Avatar billede adagio Nybegynder
20. september 2003 - 13:26 #19
Takker. Dog virker det lidt uoverskueligt, men kigger lige nærmere på det. Hvad er det for en sort?
Avatar billede adagio Nybegynder
20. september 2003 - 13:46 #20
Ahhh.. HS er Heap Sort og QS er Heap Sort...!?!
Avatar billede adagio Nybegynder
20. september 2003 - 13:47 #21
Har dog ikke arbejdet med compareable endnu
Avatar billede arne_v Ekspert
20. september 2003 - 14:07 #22
QS=QuickSort
HS=HeapSort
Avatar billede togsverd1985 Praktikant
21. september 2003 - 04:07 #23
Undskyld min nysgerrighed men jeg kopierede lige Arnes monsterkode ind og kompilerede den og fik følgende result:
0 1 4 4 6 7 7 7 7 10
999992 999993 999993 999994 999994 999995 999996 999997 999998 999998
int homemade QS : 359
0 1 4 4 6 7 7 7 7 10
999992 999993 999993 999994 999994 999995 999996 999997 999998 999998
int homemade HS : 1000
0 1 4 4 6 7 7 7 7 10
999992 999993 999993 999994 999994 999995 999996 999997 999998 999998
int Java builtin sort: 391
0 1 4 4 6 7 7 7 7 10
999992 999993 999993 999994 999994 999995 999996 999997 999998 999998
Integer homemade QS : 2656
0 1 4 4 6 7 7 7 7 10
999992 999993 999993 999994 999994 999995 999996 999997 999998 999998
Integer homemade HS : 5453
0 1 4 4 6 7 7 7 7 10
999992 999993 999993 999994 999994 999995 999996 999997 999998 999998
Integer Java builtin sort : 2250

... Hvad er det for noget?

/Christian
Avatar billede erikjacobsen Ekspert
21. september 2003 - 07:17 #24
Det viser at Javas indbyggede sortering er den bedste.
Avatar billede arne_v Ekspert
21. september 2003 - 11:30 #25
Du kan konkludere:
* QS er ca. dobbelt så hurtigt som QS (passer med teorien)
* Java builtin bruger QA (passer med dokumentationen)
* sortering af simple data typer er hurtigere end sortering af
  objekter (passer med sund fornuft)
* Java builtin er en fortrinlig sortering (hvorfor skulle de vælge
  en dårlig sortering)

Det eneste jeg ikke lige kan forklare er hvorfor min hjemmelavede
er hurtigere for int men langsommere for Integer. Der må være en
lille forskel i implementationen.
Avatar billede adagio Nybegynder
22. september 2003 - 11:52 #26
Jeg fandt denne side:
http://apolyton.net/go.php?http://www.cs.ubc.ca/spider/harrison/Java/sorting-demo.html

Som jeg prøvede at gå ud fra (Syntes ikke lige jeg kunne finde rundt i din kode)

Koden jeg er kommet frem til ligger her:
http://apolyton.net/go.php?http://zcollection.sytes.net/files/Java.zip

Men jeg har problemer med HeapSort. Af en eller anden grund så stopper den midt i det hele. I programkoden er der lavet nogle pause() som jeg ikke helt forstår. Ummidelbart virker det som nogle uendelige lykker (se SortAlgorithm.java), men med de System.out.println("Pause#") jeg har indsat, så bliver der kun udskrevet en gang "pause"
Er der nogen der kan se hvad der går galt her?

Jeg forhøjer pointene der gives ud, hvis nogen kan finde problemet
Avatar billede adagio Nybegynder
27. september 2003 - 14:49 #27
Har fået det hele til at virke nu, så jeg lukker og takker :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester