/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
StackOverflowError.. hvorfor??
Fra : Jacob Nielsen


Dato : 23-02-04 16:48

Hej,

Jeg forsøger at implementere en QuickSort algoritme der skal sortere et
array af strings, men det går ikke helt som forventet. Teorien bag koden
burde være fin nok, men alligevel får jeg en StackOverflowErrror fejl i
følgende tre linie når jeg forsøger at køre skidtet:

i = s1.compareTo(s2);

while((l<r) && (compareStrings(t[r],split) == 1)){

sortStringArray(t,start,r);

Klassen ser ud som følger (klassen der kalder denne klasse følger
umiddelbart efter):

public class IntStringQuicksort {

public static void quicksort(String[] a)
{
System.out.print("Array before sorting: ");
printArray(a);
System.out.println(" ");

sortStringArray(a, 0, a.length-1);

System.out.print("Array after sorting: ");
printArray(a);
}

// Private function that does the sorting
private static void sortStringArray(String[] t, int start, int ende)
{
int span = ende - start + 1;
if(span > 1){
String split = t[start];
String help;
int l = start;
int r = ende;
while(l < r){
while((l<r) && (compareStrings(t[r],split) == 1)){
r--;
}
while((l<r) && (compareStrings(t[l],split) == 0)){
l++;
}
if(l < r){
help = t[l];
t[l] = t[r];
t[r] = help;
r--;
l++;
}
}//while
//recursive calls
sortStringArray(t,start,r);
sortStringArray(t,r+1,ende);
}//if
}

/* Private function that compares two strings
* Returns 1 if s1 is larger than s2
* Returns 0 if s1 is smaller than s2
*/
private static int compareStrings(String s1, String s2)
{
int i, j = 0;
i = s1.compareTo(s2);

if (i > 0)
{
j = 1;
}
else if (i < 0)
{
j = 0;
}

return j;
}

// Private function that prints out the array if it's shorter than or equal
to 20
private static void printArray(String[] a)
{
if (a.length <= 20)
{
System.out.print(a[0]);
for (int i = 1; i < a.length; i++)
{
System.out.print("," + a[i]);
}
}
else
{
System.out.println("Array length is less than 20 and is thus not
printed.");
}
}
}

public class IntStringQuicksortTest {

public static void main(String[] args) {
String[] a = {"1203","007","008","0123","00123"};
IntStringQuicksort.quicksort(a);
}
}

Nogle der kan se hvad jeg gør galt?

Mvh. Jacob



 
 
Jonas Kongslund (23-02-2004)
Kommentar
Fra : Jonas Kongslund


Dato : 23-02-04 16:56

Jacob Nielsen wrote:

> Hej,
>
> Jeg forsøger at implementere en QuickSort algoritme der skal sortere et
> array af strings, men det går ikke helt som forventet. Teorien bag koden
> burde være fin nok, men alligevel får jeg en StackOverflowErrror fejl i
> følgende tre linie når jeg forsøger at køre skidtet:

Jeg har ikke sat mig ind i din kode, men en StackOverflowError tyder på at
der mangler en termineringsregel i din rekursive funktion.

--
Jonas Kongslund

Lasse Reichstein Nie~ (23-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 23-02-04 18:21

"Jacob Nielsen" <jacob.nielsenREMOVE@REMOVEget2net.dk> writes:

> Jeg forsøger at implementere en QuickSort algoritme der skal sortere et
> array af strings, men det går ikke helt som forventet. Teorien bag koden
> burde være fin nok, men alligevel får jeg en StackOverflowErrror fejl i
> følgende tre linie når jeg forsøger at køre skidtet:

....
> // Private function that does the sorting
> private static void sortStringArray(String[] t, int start, int ende)

Enderne er inklusive.
....
> int span = ende - start + 1;
> if(span > 1){
> String split = t[start];
....
> sortStringArray(t,start,r);
> sortStringArray(t,r+1,ende);

hvad sker der hvis alle strengene ligger i den ene af disse?
(Hint: Man skal ikke tage pivot'en med når man kalder rekursivt :)

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Jacob Nielsen (26-02-2004)
Kommentar
Fra : Jacob Nielsen


Dato : 26-02-04 19:48

"Lasse Reichstein Nielsen" <lrn@hotpop.com> wrote in message
news:eksl4sr9.fsf@hotpop.com...
> "Jacob Nielsen" <jacob.nielsenREMOVE@REMOVEget2net.dk> writes:
>
> > Jeg forsøger at implementere en QuickSort algoritme der skal sortere et
> > array af strings, men det går ikke helt som forventet. Teorien bag koden
> > burde være fin nok, men alligevel får jeg en StackOverflowErrror fejl i
> > følgende tre linie når jeg forsøger at køre skidtet:
>
> ...
> > // Private function that does the sorting
> > private static void sortStringArray(String[] t, int start, int ende)
>
> Enderne er inklusive.
> ...
> > int span = ende - start + 1;
> > if(span > 1){
> > String split = t[start];
> ...
> > sortStringArray(t,start,r);
> > sortStringArray(t,r+1,ende);
>
> hvad sker der hvis alle strengene ligger i den ene af disse?
> (Hint: Man skal ikke tage pivot'en med når man kalder rekursivt :)

Tak :)



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408918
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste