# <identifier> expected



## Hilfe (1. Feb 2007)

Oh man ich werd das identifier expected nicht mehr los und ich versteh nich weshalb. Hab mir mittlerweile tausendmal angeguckt wie man Klassen und Methoden deklariert und seh bei mir keinen Fehler. Die Fehler schreib ich mal in den Quelltext rein. Da mir Netbean die Complilerfehler sofort ausgibt.
Bitte könnt ihr mir sagen, an welcher Stelle ich unfähig bin.



```
package mergesort2;

import HUMath.Numerik.*;
public class Merge {

public String mergesort(String a);
{int halb=div(length(a),2);
 if (String.length(a) > 1) {String a1 = a.substring(0,halb);
                            String a2 = a.substring(halb,length(a)); 
                            return sort(mergesort(a1),mergesort(a2));
                           }
}
//Eine Zeile tiefer gibt das Programm aus: <identifier> expected
public String sort(String a,b){
 Sring summe;
 while((length(a) != 0) && (length(b) != 0)){
     if (a.charAt(0) > b.charAt(0)) {
                                     summe = summe + a.charAt(0);
                                    }
     else                           {
                                     summe = summe + b.charAt(0);
                                    }
 return summe;
                                            }  
     
 do    
                                        
                                    }

public static void main(String [] args){
    String ausgabe; 
    ausgabe = mergesort("dlemdneioaf");
    System.out.println(ausgabe);     
// Eine Zeile drunter gibt er aus: ")" expected (Jedoch wieso?)    
                           }
}
```
[/code]


----------



## hupfdule (1. Feb 2007)

Anonymous hat gesagt.:
			
		

> ```
> Sring summe;
> ```



Hätte wohl "String" heißen sollen.


----------



## Guest (1. Feb 2007)

JA aber leider nicht der Grund meines Problemes


----------



## DocRandom (1. Feb 2007)

Du schreibst
	
	
	
	





```
public String sort(String a,b){
```
sollte es nicht eher
	
	
	
	





```
public String sort(String a, String b){
```
heissen?

lg
DocRandom


----------



## Guest (1. Feb 2007)

AAAAHHHH
Ich hasse Java. Ich will mein geliebtes Turbo Pascal wieder haben. Wegen diesen Müll sitz ich schon drei Stunden am Rechner.
AAAAHHHH

tausend Dank DocRandom


----------



## DocRandom (1. Feb 2007)

> Ich hasse Java. Ich will mein geliebtes Turbo Pascal wieder haben. Wegen diesen Müll sitz ich schon drei Stunden am Rechner.


..auch TP ist out, verwende besser FP (FreePascal), den das kann auch schon OO  

lg
DocRandom


----------



## Guest (1. Feb 2007)

FP, werde ich mir angucken. Aber momentan muss ich leider im Rahmen des Studium Java lernen. Evtl. ist es ja garnicht schlecht gezwungen zu werden, die kommende SPrache schlechthin zu lernen.

Aber momentan sitz ich vor einen weiteren kleinen Problem, der Fern meiner Logik sich befindet:


```
public static String sort(String a, String b){  
 while((a.length() != 0) && (b.length() != 0)){
     String summe;
     if (a.charAt(0) > b.charAt(0)) {summe = summe + a.charAt(0);}
                                    
     else                           {summe = summe + b.charAt(0);}
                                              }
     return summe; // Er behauptet hier, das er die SUmme nicht kennt, dabei hab ich doch die Summe als erstes deklariert.
```
Das Programm behauptet


----------



## SlaterB (1. Feb 2007)

die Summe ist in der Schleife definiert, außerhalb nicht bekannt,

die Schleife macht auch keinen Sinn, 
da sich die Prüfbedingung nicht ändert wird sie nie oder unendlich lange laufen,
summe wird bei jeden Schleifendurchlauf neu erzeugt und ist wie gesagt außerhalb gar nicht mehr existent,

recht sinnlos 

und gruselig formatiert,
du hast doch so viele Beispiele angesehen,
war da etwa ein solches dabei?


----------



## DocRandom (1. Feb 2007)

> // Er behauptet hier, das er die SUmme nicht kennt, dabei hab ich doch die Summe als erstes deklariert.


..und der Compiler hat recht! 
Du hast 'Dumme innerhalb des Blockes; also innerhalb der while-Schleife { }; deklariert.
Ergo ist Summe auch nur innerhalb des Blockes sichtbar
Verschiebe die Deklaration nach oben, also außerhalb des Blockes und Summe wir für die Methode sichtbar!

```
public static String sort(String a, String b){
   String Summe;
   while((a.length() != 0) && (b.length() != 0)){ 
 ...
```

mfg
DocRandom

[EDIT:] ..mist, wieder mal zu spät!


----------



## Guest (1. Feb 2007)

@ SLaterB
Ganz vergessen, dem String das Element weg zu nehmen was ich an der Summe ran hänge. Danke. Trotzdem ist das leider nicht mein Problem.
Was meinst du mit gruslig formatiert. Ich find das sehr übersichtlich. (Formatiert heißt doch wie man en Text aufbaut?).

@ DocRandom

Achja. Da wo du es stehen hast, hatte ich es vorher 
Bloß da hat mir dann gleich gesagt, dass er keine der summen kennt 
Als ich das in die while Schleife geschrieben habe, hat er wenigsten die summe in der while Schleife erkannt.
Weshalb ich erstmal dort stehen lassen hab, auch wenn es mir klar war dass immer wieder summe neu erzeugt wurde.
Sorry.
Also eigentlich steht der "String summe;" Therm vor der while.
Da zeigt er halt zusätzlich noch, an dass er mit der SUmme in der while und dem "return summe" nichts anfangen kann.


----------



## DocRandom (1. Feb 2007)

..sorry, ein Schreibfehler von mir, sollte natürlich
	
	
	
	





```
String summe;
```
 heissen, da JAVA "Case-Sensetiv" ist! 

lg
DocRandom


----------



## Guest (1. Feb 2007)

DocRandom hat gesagt.:
			
		

> ..sorry, ein Schreibfehler von mir, sollte natürlich
> 
> 
> 
> ...


 Denn hatte ich leider nicht in meinem Programm.

Ich hatte es dort richtig implemetiert. Zumindest summe klein.


----------



## Guest (1. Feb 2007)

Nochmal mein Problemcode, im Zusammenhang:


```
public static String sort(String a, String b){  
 String summe;
  while((a.length() != 0) && (b.length() != 0)){
     if (a.charAt(0) > b.charAt(0)) {
                                     summe = summe + a.charAt(0);
                                     a= a.substring(1,a.length()); 
                                    }
                                    
     else                           {
                                     summe = summe + b.charAt(0);
                                     b= b.substring(1,b.length());
                                    }
                                              }
     return summe;
                                       }
```
[/code]


----------



## DocRandom (1. Feb 2007)

..poste doch mal Deinen Code wie er jetzt aussieht!
Meine Glaskugel sagt mir ned, wie ich Dir weiterhelfen kann! 

mfg
DocRandom
[EDIT:] ..mist, wieder mal zu spät!


----------



## Guest (1. Feb 2007)

Und noch mal den Code, mit den Fehlern beschriftet. 


```
public static String sort(String a, String b){  
 String summe;
  while((a.length() != 0) && (b.length() != 0)){
     if (a.charAt(0) > b.charAt(0)) {
                                     summe = summe + a.charAt(0); //summe erkennt er nicht
                                     a= a.substring(1,a.length()); 
                                    }
                                    
     else                           {
                                     summe = summe + b.charAt(0); // summe erkennt er nicht
                                     b= b.substring(1,b.length());
                                    }
                                              }
     return summe; //summe erkennt er nicht
                                       }
```
Java hat ja auch oft vordefenierte Variablen, jedoch hab ich selbst schon d und c ausprobiert anstatt Summe. Leider das gleiche Problem.
Für mich erscheint das alles als sehr unlogisch.[/code]


----------



## DocRandom (1. Feb 2007)

Das Problem lag/liegt nicht daran, das er die Variable summe nicht kennt, sondern das diese nicht initialisiert worden ist!
Hier mal mein Beispiel-Code:

```
package gast;

public class Test {

	public static String sort(String a, String b){ 
		String summe = new String();
		while((a.length() != 0) && (b.length() != 0)){
			if (a.charAt(0) > b.charAt(0)) {
				summe = summe + a.charAt(0);
				a= a.substring(1,a.length());
			}else {
				summe = summe + b.charAt(0);
				b= b.substring(1,b.length());
			}
		}
		return summe;
	}
}
```
Und die TestMain dazu:

```
package gast;

public class TestMain {

	public static void main(String[] args) {
		System.out.println("Was auch immer dabei rauskommen soll = " + 
				Test.sort("Das ist der Test", "Das ist ein Test"));

	}

}
```

Du könntest auch schreiben:

```
String summe = "";
```
Ich persönlich ziehe die 

```
String summe = new String();
```
Variante vor.

mfg
DocRandom


----------



## moormaster (1. Feb 2007)

Das kann ja so auch nicht gehen. Die Variable Summe muss nicht nur deklariert, sondern auch initialisiert werden. Wenn da nur String summe; steht, dann hat summe keinen Wert bzw. den Wert null.

Ein summe = summe + ... kann aber nur funktionieren, wenn summe bereits ein konkreter Wert ist. Zum Beispiel ein leerer String "".


```
public static String sort(String a, String b){ 
String summe = ""; // muss initialisiert werden, damit man summe = summe + ... ausführen kann.
  while((a.length() != 0) && (b.length() != 0)){
     if (a.charAt(0) > b.charAt(0)) {
                                     summe = summe + a.charAt(0); //summe erkennt er nicht
                                     a= a.substring(1,a.length());
                                    }
                                   
     else                           {
                                     summe = summe + b.charAt(0); // summe erkennt er nicht
                                     b= b.substring(1,b.length());
                                    }
                                              }
     return summe; //summe erkennt er nicht
                                       }
```


----------



## Guest (1. Feb 2007)

tausend Dank. Ich wer da in tausend Nächten nicht drauf gekommen.
Echt du hast mir meine Nacht gerettet 
Jetzt läuft alles sauber, zumindest weiß ich wo die übrigen Fehler noch liegen


----------



## Guest (1. Feb 2007)

Und sorry wegen meiner Rechtschreibung bin jetzt seit 4 Uhr morgen früh wach


----------



## murx (1. Feb 2007)

zum Abschluss der fertige Quelltext. Ich finde das gehört zu jedem Fragethread.

Das ganze ist Mergesort. Auskommentiert habe ich es noch nicht. Ich denke aber dass das ganze mit Kenntnisse der Rekursion sehr leicht zu verstehen ist.
Die HUMath Bibliothek verwende ich lediglich zum einlesen des Strings.

```
package mergesort2;

import HUMath.Numerik.*;
import java.lang.String;


public class Main {


public static String mergesort(String a)
{if (a.length() > 1) {
     String a1 = a.substring(0,a.length()/2);
     String a2 = a.substring(a.length()/2,a.length()); 
     a1 = mergesort(a1);
     a2 = mergesort(a2);
     return sort(a1,a2);
                     }
 return a;
}
public static String sort(String a, String b){  
 String summe= new String();
    while((a.length() != 0) && (b.length() != 0)){
             if (a.charAt(0) < b.charAt(0)) {
                                          summe = summe + a.charAt(0);
                                          a= a.substring(1,a.length()); 
                                            }
                                    
                                         else
                                            {
                                          summe = summe + b.charAt(0);
                                          b= b.substring(1,b.length());
                                            }
  }
 if (a.length() >0)  {summe = summe + a;}
                   else
                     {summe = summe + b;}    
return summe;
}                                        
                                       
public static void main(String [] args){
    String ausgabe;
    String eingabe;
    eingabe = ReadDialog.getString("Geben sie einen String ein:");
    ausgabe = mergesort(eingabe);
    System.out.println(ausgabe);
    
    
                                       }
}
```

Nochmal tausenden Dank.[/code]


----------

