# Bubblesort Programmierung, finde Fehler nicht .



## kracker (13. Okt 2004)

Hi, kann sich mal jemand diesen quelltext anschauen, hab da ein riesenproblem, will ein "bubblesort" programm machen, d.h aus einer txt datei etwas auslesen und "ordnen" nach alphabet: zB in der txt file:

mama
baba
gaga

beim ausgeben:

baba
gaga
mama

hier der quelltext:
--------------------------------------------------------------------------------

```
import java.io.*;

public class Bubblesort
{
public static void main (String args[])
{
BufferedReader dateiLeser;
int i=0, count=0;
String zeile[]=new String[100];
String Speicher;

try
{
dateiLeser = new BufferedReader (new FileReader ("Name.txt"));

zeile[count] = dateiLeser.readLine(); 
if ( zeile[count] != null ) count++;

while(zeile[count] != null){ 

zeile[count] = dateiLeser.readLine(); 
if ( zeile[count] != null ) count++;

} 
dateiLeser.close();
}catch (IOException e)
{
System.err.println("Fehler");
}
while ( i<count-1 ){
if( zeile[i].compareTo(zeile[i+1]) < 0 )
{
Speicher=zeile[i];
zeile[i]=zeile[i+1];
zeile[i+1]=Speicher;
if(i!=0){
i--;
}

}else{
i++;
}
}
for(i=0;i System.out.println(zeile[i]);
}


}
}
```
----------------------------------------------------------------

ausgeben tut er nur
eines, weiss uach nicht wieso .. (dos plattform)


----------



## kracker (13. Okt 2004)

sry für schnellposting, aber ich wollte nur noch anmerken, wenn möglcih das der quelltext so ähnlich bleibt, weil sonst kenn ich mich nicht wirklich aus ...


----------



## kracker (13. Okt 2004)

wahhh jetzt zuck ich aus
hab doch noch einen neuen quelltext jetzt, der sollte viel lkeichter anzusehen sein, jedoch funktioniert er immer noch nnicht, er schreibt class nicht definiert:


```
import java.io.*;

class Bubble { 
static String arr[]={"Now", "is", "the", "time", "for", "all", "good", "men", 
"to", "come", "to", "the", "aid", "of", "their", "country"}; 

  public static void main(String[] args) { 

for(int j=0; j<arr.length; j++){ 
      for (int i = j + 1; i < arr.length; i++) { 
        if (arr[i].compareTo(arr[j]) < 0) { 
          String t = arr[j]; 
          arr[j] = arr[i]; 
          arr[i] = t; 
        } 
      } 
      System.out.println(arr[j]); 
} 
      
    } 
  } 
  }
```

was is da falsch bitte ????


----------



## Roar (13. Okt 2004)

dein shcöner compiler spuckt dir, nett wie er ist, auchnoch die zeilennummer aus. also solltest du in der zeile vielleicht mal gucken. und wenn du deinen code richtig einrücken würdest, würdest du auch sehe ndass da eine klammer zuviel ist.


----------



## Rydl (13. Okt 2004)

also ich bin jetzt nich grad DER java-spezi, aber auf den ersten blick macht diese eine klammer dort am schluss deines zweiten codes/programms einen schlechten eindruck im gesamtbild. wenn man jetzt noch mal richtig durchzählt, stellt man fest dass die da sogar einfach nur zuviel ist...


----------



## kracker (13. Okt 2004)

danke, habs nun, aber eine frage noch, wie kann ich den quelltext so umwandeln das ich es von einer "datei" (txt) auslese? schaffe es einfach nit, ich  werd noch verrückt !

ps: ich meine den 2ten quelltext ....


----------



## Illuvatar (13. Okt 2004)

```
StringBuffer sb = new StringBuffer("");
BufferedReader br = new BufferedReader (new FileReader ("namederdatei"));
String s;
while ((s = br.readLine()) != null){
  sb.append (s + System.getProperty ("line.separator", "\n"));
}
s = sb.toString();
```

In s steht dann der Dateiinhalt.
Die Klassen stammen aus java.io.*.

Du könntest natürlich auch einen java.util.Vector<String> statt dem StringBuffer nehmen, dann hast du am Schluss die einzelnen Zeilen.


----------



## Guest (13. Okt 2004)

@Illuvatar
Nur mal so ein Gedanke...
Was bring Dir StringBuffer, wenn Du trotzdem "string concatenation" verwendest

```
sb.append (s + System.getProperty ("line.separator", "\n"))
```
 :noe: :bae:

Gruß,
GarbageCollector


----------



## Illuvatar (13. Okt 2004)

Naja, an der einen Stelle.
Das war halt grad zusammengehackt.

Also, Kinderchen: Das war ein Negativbeispiel. Benutzt nie den + Operator in solchen Fällen


----------



## kracker (13. Okt 2004)

hm, danke, nur leuchtet mir diese "Methode" nicht ganz ein :


```
while ((s = br.readLine()) != null){ 
  sb.append (s + System.getProperty ("line.separator", "\n")); 
}
```
was bedeutet diese sb.append 
und das system.getproperty und line.separator ?
geht das nicht mit einfacheren methoden ?

weil irgentwie hab ich das noch nicht gelernt (schule) und dann würd sich der lehrer wundern wie ich das gemacht hab, und wenn ich das dann net erklären kann  ...


----------



## Guest (13. Okt 2004)

Siehe: append


```
while ((s = br.readLine()) != null){  // Zeile in 's' einlesen und solange noch kein Dateiende (s == null) 
  sb.append (s).append("\n"); // Zeile ans Ende des Puffers "anfügen" und Zeilenende hinten dran
}
```


----------



## kracker (13. Okt 2004)

mhm und was ist mit dem?

```
sb.append (s + System.getProperty ("line.separator", "\n"));
```

das getproperty line separator verwirrt immer noch


----------



## Illuvatar (13. Okt 2004)

Das br.readLine() liest eine Zeile aus, und gibt den Zeilenbegrenzer nicht zurück, deswegen hänge ich noch plattformunabhängig eine Zeilenschaltung an.


----------



## kracker (13. Okt 2004)

ja, ok das is klar mit dem readline aber was ist jetzt mit dem getproperty line separator ??


----------



## Illuvatar (13. Okt 2004)

Die Zeilenschaltung ist plattformabhängig, in Windows ist das z.B. \r\n, in Linux nur \n usw...
Die Methode gibt die Zeilenschaltung für das aktuelle Betriebssystem zurück.

PS: Ich seh grad, du willst das in einem Array. Dann gehts auch so:

```
StringBuffer sb = new StringBuffer(""); //StringBuffer#append ist schneller als String + Operator
BufferedReader br = new BufferedReader (new FileReader ("namederdatei")); 
String s; 
while ((s = br.readLine()) != null){ 
  sb.append (s);
  sb.append ("\n");
} 
s = sb.toString();
String[] arr = s.split ("\n");
```


----------



## kracker (13. Okt 2004)

mhm danke ich schau mir das mal schnell an, wo gibts eignetlich eine Java "objekt"referenz wie in php und html ?

ich probiers mal, brauche wahrscheinlcih eh wieder deine hilfe


----------



## Illuvatar (13. Okt 2004)

Meinst du die API? Die solltest du aber dringend kennen.

http://www.java-forum.org/de/viewtopic.php?t=2218


----------



## kracker (13. Okt 2004)

hmn, da isses, 1 error:


> Bubble1.java:8 :Type expected
> while ((s = br.readLine()) != null){
> ^


was kann das sein ?
mein ganzer quelltext hier:


```
import java.io.*;

class Bubble1 {

StringBuffer sb = new StringBuffer(""); 
BufferedReader br = new BufferedReader (new FileReader ("Name.txt")); 
String s; 
while ((s = br.readLine()) != null){ 
  sb.append (s); 
  sb.append ("\n"); 
} 
s = sb.toString(); 
String[] arr = s.split ("\n");


  public static void main(String[] args) { 

for(int j=0; j<arr.length; j++){ 
      for (int i = j + 1; i < arr.length; i++) { 
        if (arr[i].compareTo(arr[j]) < 0) { 
          String t = arr[j]; 
          arr[j] = arr[i]; 
          arr[i] = t; 
        } 
      } 
      System.out.println(arr[j]); 
} 
      
    } 
  }
```


----------



## Illuvatar (13. Okt 2004)

Weil das in eine Methode gehört.... schon bissle spät? :wink:


----------



## kracker (13. Okt 2004)

lol, ich glaub ich werd schon deppert, naja kann man nix machen, ich musste heute 5 stunden html schreiben, danach Flash und dann noch java, sitze schon seit 2 uhr da und es will einfach nix weitergehn .. augen tun eh schon weh


----------



## kracker (13. Okt 2004)

sagmal, ich bin wirklich schon blöd. wie gehört das jetzt ? es kommt wieder nen error, ich dabacks nicht !!!


----------



## Illuvatar (13. Okt 2004)

```
import java.io.*; 

class Bubble1 { 


  public static void main(String[] args) { 
StringBuffer sb = new StringBuffer(""); 
BufferedReader br = new BufferedReader (new FileReader ("Name.txt")); 
String s; 
while ((s = br.readLine()) != null){ 
  sb.append (s); 
  sb.append ("\n"); 
} 
s = sb.toString(); 
String[] arr = s.split ("\n"); 
for(int j=0; j<arr.length; j++){ 
      for (int i = j + 1; i < arr.length; i++) { 
        if (arr[i].compareTo(arr[j]) < 0) { 
          String t = arr[j]; 
          arr[j] = arr[i]; 
          arr[i] = t; 
        } 
      } 
      System.out.println(arr[j]); 
} 
      
    } 
  }
```


----------



## kracker (13. Okt 2004)

naja hab ich eh gemacht, aber kommen 3 errors:


```
Bubble1.java:8: Exception java.io.FileNotFoundException must be caught, or it mu
st be declared in the throws clause of this method.
BufferedReader br = new BufferedReader (new FileReader ("Name.txt"));
                                        ^
Bubble1.java:10: Exception java.io.IOException must be caught, or it must be dec
lared in the throws clause of this method.
while ((s = br.readLine()) != null){
                       ^
Bubble1.java:15: Method split(java.lang.String) not found in class java.lang.Str
ing.
String[] arr = s.split ("\n");
                       ^
3 errors
```
.....
ich werd wahnsinnig


----------



## kracker (13. Okt 2004)

java.io muss da sein, es ging bisher immer, also was soll der schmarn


----------



## Illuvatar (13. Okt 2004)

Zu den ersten beiden: du musst die Exceptions, die geworfen werden können, fangen, oder weitergeben, also
public static void main (String[] args) throws IOException
zum Beispiel. Und die String#split(String) Methode gibt es erst ab Java 1.4.


----------



## kracker (13. Okt 2004)

gr, und was soll ich jetzt machen? 
kenn mich nicht mehr wirklich aus ...


----------

