Stian F Skrevet 16. mars 2006 Del Skrevet 16. mars 2006 Hei Noen som kan hjelpe meg med ett problem? Jeg skal kalle opp metoden rand_numb fra metoden bubblesort og rand_numb skal generere et array med tilfeldige tall som skal sorteres i bublesort metoden. Koden: void bubblesort(){ int a[]; long starttid2, sluttid2, totaltid2; starttid2 = System.currentTimeMillis(); for (int i=a.length;--i>=0;){ for (int j = 0; j < i; j++) { if (a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; }//if }//for }//for sluttid2 = System.currentTimeMillis(); totaltid2 = sluttid2-starttid2; System.out.println("Sorteringen tok: "+totaltid2+" sekunder aa sortere."); // print the sorted array /** for (int k = 0; k < a.length; k++) { System.out.println("a[" + k + "]: " + a[k]); } */ }//void bubblesort void rand_numb(){ Scanner tastatur = new Scanner(System.in);//Starter scannerclassen System.out.print("Tast inn antall tilfeldige tall: "); int ant = tastatur.nextInt(); Random tilfeldig = new Random(); int a[] = new int[ant]; for(int i=0;i<ant;i++){ a[i]=tilfeldig.nextInt(1000000000); }//for for(int j=0;j<ant;j++){ System.out.print(a[j]+", "); } System.out.println(); }//void rand_numb Håper noen kan hjelpe meg. //stian f Lenke til kommentar
Edorph Skrevet 16. mars 2006 Del Skrevet 16. mars 2006 (endret) Hmm, mulig jeg ikke forsto problemet ditt, men. void bubblesort(){ int[] a = rand_numb(); // Kaller opp rand_numb for å få en array med tilfeldige tall (...) }//void bubblesort private static int[] rand_numb(){ // Endret return type fra void til int[] (...) return a; // Metoden returnerer arrayen med tilfeldige tall }//void rand_numb Endret 16. mars 2006 av Edorph Lenke til kommentar
alskfjas Skrevet 16. mars 2006 Del Skrevet 16. mars 2006 int[] a, ikke int a[]. int[] a = new int[ant]; Lenke til kommentar
Stian F Skrevet 16. mars 2006 Forfatter Del Skrevet 16. mars 2006 Takk for svar, jeg skal prøve i mårra... //stian f Lenke til kommentar
Stian F Skrevet 17. mars 2006 Forfatter Del Skrevet 17. mars 2006 Det funke, takk for hjelpen folkens.. En liten ting hva er forskjeld på "int[] a" og "int a[]"? Det var dær feilen lå, jeg hadde prøvd med "int a[]" tidligere uten at det funket... //stian f Lenke til kommentar
Edorph Skrevet 17. mars 2006 Del Skrevet 17. mars 2006 Det var rart. Begge skrivemåter er gyldige, men int[] s; er standarden. Lenke til kommentar
Stian F Skrevet 17. mars 2006 Forfatter Del Skrevet 17. mars 2006 (endret) Hmm, jaja, uanbsett så funker det nå Men hva gjør jeg for å kalle opp random array metoden fra en slik sorteringsmetode?: void quicksort(int []a, int l, int r){ int q; if(r<=l) return; q=partition(a,l,r); quicksort(a,l,q); quicksort(a,q+1,r); }//void quicksort int partition(int []a, int l, int r){ int x=a[(l+r)/2]; int i=l-1; int j=r+1; for(;;){ while(a[j]>x){ j--; } while(a[i]<x){ i++; } if(i<j){ int c=a[i]; a[i]=a[j]; a[j]=c; }//if else return j; }//for }//int partition //stian f Endret 17. mars 2006 av Stian F Lenke til kommentar
Edorph Skrevet 17. mars 2006 Del Skrevet 17. mars 2006 (endret) siden quicksort(int []a, int l, int r) tar en array som parameter, ville jeg gjort det slik int[] a = rand_num(); quicksort( a, l, r ); for (int k = 0; k < a.length; k++) System.out.println("a[" + k + "]: " + a[k]); // for å se resultatet Endret 17. mars 2006 av Edorph Lenke til kommentar
Stian F Skrevet 17. mars 2006 Forfatter Del Skrevet 17. mars 2006 Takk for svar, godt med flinke folk tillgjengelig når en sliter:) Når jeg kaller opp quicksort med: int[] a = rand_numb(); quicksort( a, l, r ); Får jeg beskjed om at "cannot find symbol variabel l" og "cannot find symbol variabel r", har jeg gjort noe feil? //stian f Lenke til kommentar
Edorph Skrevet 17. mars 2006 Del Skrevet 17. mars 2006 quicksort(int[] a, int l, int r) trenger en int-array og to int-variabler som parametre. Jeg skrev bare l og r fordi jeg tenkte du visste hva du skulle putte inn der. Hvis ikke jeg husker feil (ok, jeg slo det opp )så skal l være såkalt left boundary, og r right boundary. Siden vi i første rekursjon skal ta for oss hele tabellen, antar jeg at l kan være 0 og r a.length. Da får vi mao noe sånt: int[] a = rand_num(); int l = 0; int r = a.length - 1; quicksort( a, l, r ); for (int k = 0; k < a.length; k++) System.out.println("a[" + k + "]: " + a[k]); // for å se resultatet Lenke til kommentar
Stian F Skrevet 17. mars 2006 Forfatter Del Skrevet 17. mars 2006 Jeg prøvde det tidligere, men fikk det ikke til å funke, men det funket med heapsort som kalles opp på en liknende måte. På quicksort fikk jeg bare beskjed om at: "ArrayIndexOutOfBoundsException", så det er nok noe feil med quicksort-koden min... //stian f Lenke til kommentar
Edorph Skrevet 17. mars 2006 Del Skrevet 17. mars 2006 (endret) Ser ut som du har forvekslet pluss og minus i partition-metoden ja. Linjene int i=l-1; int j=r+1; Må endres til int i=l+1; int j=r-1; ellers feiler den på while(a[j] rett under. Variablen l var jo 0, så 0-1 blir -1, og a[-1] går jo ikke. Da skulle det funke. Endret 17. mars 2006 av Edorph Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå