Gå til innhold

Kalling av metode som genererer et tilfeldig array


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Edorph
Lenke til kommentar

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 av Stian F
Lenke til kommentar

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 av Edorph
Lenke til kommentar

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

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 :p)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

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

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 av Edorph
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...