Compiler-Fehler Fehler: else without if

elisarocks

Mitglied
Hallo Leute,

bekomme hier die Fehlermeldung 'else' without 'if'
bin für jede Hilfe dankbar 🙂

if (c <= 122 && c >= 97) {
a = c;
a = Character.toUpperCase(a);



if (65 <= c && c <= 90)
a = c;
a = Character.toLowerCase(a);


else
c = 95;

}
 
Hallo Elisa,

herzlich willkommen bei "java-forum.org".

Da fehlt eine geschweifte Klammer vor dem else:

Java:
if (c <= 122 && c >= 97) {
    a = c;
    a = Character.toUpperCase(a);
    if (65 <= c && c <= 90) {
        a = c;
    }
    a = Character.toLowerCase(a);
} else {
    c = 95;
}

Gruß,
André

PS: ich weiß allerdings nicht, ob ich die Klammern so gesetzt habe, wie dein Algorithmus es verlangt, da Du ja zwei if hast und nicht offensichtlich ist, auf welches sich das else bezieht.
 
Zuletzt bearbeitet:
Hallo André,

vielen Dank für deine Antwort. Der Error ist jetzt weg 🙂

das Ergebnis stimmt leider noch nicht so ganz, er macht zwar Kleinbuchstaben groß, aber das andere macht er nicht. Bin leider noch Anfänger in Java.

Ich poste mal das Beispiel damit du dich auskennst:

Das Programm soll 2 Zeichen einlesen und diese Ersetzungen durchführen:

Wenn eine Kleinbuchstabe eingelesen wurde soll er durch einen Großbuchstaben ersetzt werden.
Wenn eine Großbuchstabe eingelesen wurde soll er durch einen Kleinbuchstaben ersetzt werden.
Alle anderen Zeichen sollen durch einen Unterstrich ersetzt werden (_).
Beide Zeichen sollen ohne weiteren Text ausgegeben werden.

Beispiel:

Eine Eingabe von 'a' und '8' soll zu folgender Ausgabe führen:

A_

lg Elisa
 
André Uhres hat es in eine bessere Richtung korrigiert, aber schon angemerkt dass es so noch nicht korrekt sein kann,

wenn if (c <= 122 && c >= 97) { erfüllt ist, welchen Sinn hat es, darin noch if (65 <= c && c <= 90) { zu prüfen?
das kann doch gar nicht der Fall sein

die Aufgabe dazu zu posten ist bisschen wenig, wobei du ja schon viel Code hast,
aber überlege jetzt doch nochmal selber wie er wohl besser anzuordnen ist
 
Java:
if (c <= 122 && c >= 97) {
    a = c;
    a = Character.toUpperCase(a);
    if (65 <= c && c <= 90) {
        a = c;
    }
    a = Character.toLowerCase(a);
} else {
    c = 95;
}

Gruß,
André

PS: ich weiß allerdings nicht, ob ich die Klammern so gesetzt habe, wie dein Algorithmus es verlangt, da Du ja zwei if hast und nicht offensichtlich ist, auf welches sich das else bezieht.

Würde sagen so ist SlaterBs einwand weg:
Java:
if (c <= 122 && c >= 97) {
        a = c;
        a = Character.toUpperCase(a);
    }
    if (c >= 65 && c <= 90) {
        a = c;
        a = Character.toLowerCase(a);
} else {
    c = 95;
}

Wenn c zwischen 65 & 90 ist macht er die Buchstaben klein, wenn c zwischen 97 & 122 ist, dann macht er die Buchstaben groß, wenn beides nicht der Fall ist, dann macht er c zu 95.

(Sollte weniger "macht" schreiben)
 
habs jetz korrigiert, so passt es mal 🙂

hab die code jetz nochmal kopiert um für das 2. Zeichen das eingegeben wird die Konvertierung durchzuführen, nur leider gibt es jetzt wieder Probleme. Wenn ich zB für c: j eingebe und für d: K
bekomme ich raus:

Ausgabe: J
Ausgabe: j
Ausgabe: k

Versteh nicht warum er mir das zweite j ausgibt.


Java:
System.out.println("Bitte ein Zeichen eingeben: ");
	c = SavitchIn.readLineNonwhiteChar();
	
	System.out.println("Bitte noch ein Zeichen eingeben: ");
	d = SavitchIn.readLineNonwhiteChar();
	

	
	if (c <= 122 && c >= 97) {
 
    c = Character.toUpperCase(c);
	 System.out.println("Ausgabe: "+ c);
	}
	 
   if (65 <= c && c <= 90) {
         c = Character.toLowerCase(c);
		  System.out.println("Ausgabe: "+ c);
    }
	 
	 else {
    c = 95;
	 System.out.println("Ausgabe: " +c);
	 }
	
	
		if (d <= 122 && d >= 97) {
 
    d = Character.toUpperCase(d);
	 System.out.println("Ausgabe: "+ d);
	}
	 
   if (65 <= d && d <= 90) {
         d = Character.toLowerCase(d);
		  System.out.println("Ausgabe: "+ d);
    }
	 
	 else {
    d = 95;
	 System.out.println("Ausgabe: " +d);
	 }

lg Elisa
 
Und am besten benutzt du gleich den entsprechenden char. Ist besser verständlich.
Java:
if (c <= 'a') // oder was 122 ist
 
habs jetz korrigiert, so passt es mal 🙂

hab die code jetz nochmal kopiert um für das 2. Zeichen das eingegeben wird die Konvertierung durchzuführen, nur leider gibt es jetzt wieder Probleme. Wenn ich zB für c: j eingebe und für d: K
bekomme ich raus:

Ausgabe: J
Ausgabe: j
Ausgabe: k

Versteh nicht warum er mir das zweite j ausgibt.


Java:
System.out.println("Bitte ein Zeichen eingeben: ");
	c = SavitchIn.readLineNonwhiteChar();
	
	System.out.println("Bitte noch ein Zeichen eingeben: ");
	d = SavitchIn.readLineNonwhiteChar();
	

	
	if (c <= 122 && c >= 97) {
 
    c = Character.toUpperCase(c);
	 System.out.println("Ausgabe: "+ c);
	}
	 
   if (65 <= c && c <= 90) {
         c = Character.toLowerCase(c);
		  System.out.println("Ausgabe: "+ c);
    }
	 
	 else {
    c = 95;
	 System.out.println("Ausgabe: " +c);
	 }
	
	
		if (d <= 122 && d >= 97) {
 
    d = Character.toUpperCase(d);
	 System.out.println("Ausgabe: "+ d);
	}
	 
   if (65 <= d && d <= 90) {
         d = Character.toLowerCase(d);
		  System.out.println("Ausgabe: "+ d);
    }
	 
	 else {
    d = 95;
	 System.out.println("Ausgabe: " +d);
	 }

lg Elisa

Weil da insgesamt noch 2 else Fehlen, quelltext kommt mit dem editieren.

EDIT:

Java:
System.out.println("Bitte ein Zeichen eingeben: ");
	c = SavitchIn.readLineNonwhiteChar();
	
	System.out.println("Bitte noch ein Zeichen eingeben: ");
	d = SavitchIn.readLineNonwhiteChar();
	

	
	if (c <= 122 && c >= 97) {
 
    c = Character.toUpperCase(c);
	 System.out.println("Ausgabe: "+ c);
	} else{
	 
   if (65 <= c && c <= 90) {
         c = Character.toLowerCase(c);
		  System.out.println("Ausgabe: "+ c);
    }
	 
	 else {
    c = 95;
	 System.out.println("Ausgabe: " +c);
	 }
        }
	
	
		if (d <= 122 && d >= 97) {
 
    d = Character.toUpperCase(d);
	 System.out.println("Ausgabe: "+ d);
	}
else{
	 
   if (65 <= d && d <= 90) {
         d = Character.toLowerCase(d);
		  System.out.println("Ausgabe: "+ d);
    }
	 
	 else {
    d = 95;
	 System.out.println("Ausgabe: " +d);
	 }
	}
 
Zuletzt bearbeitet von einem Moderator:
Danke Asgar!!

Hab nun noch eine Frage. Ich muss nämlich die Zeichen in einer Zeile einlesen und nicht auf 2 aufteilen so wie ichs gemacht hab. Bekomme bei der Online Abgabe leider diese Fehlermeldung.

Also meine Frage ist jetzt wie kann das Programm erkennen wenn ich zB eingebe F$ welches das erste und welches das zweite Zeichen ist damit ich die jeweils der Variable c und d zuordnen kann?
 
Letzter Post, bevor ich ins Bett geh.

Dieses "Programm" lässt dich eine Eingabe in der Konsole machen (oder du änderst löscht die 1. Zeile und änderst die 3. ab), switcht die Buchstaben in der Größe und gibt einen Unterstrich für jedes andere Zeichen.

Java:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String strAusgabe = "";
		String eingabe = in.readLine(); //Hiermit machst du deine Eingabe in das Console-Fenster.
		for(int i = 0; i < eingabe.length();i++) {
			if ( eingabe.charAt(i) <= 122 && eingabe.charAt(i) >= 97) {
				 
			    strAusgabe = strAusgabe + Character.toUpperCase(eingabe.charAt(i));
			    } else {	     
			    	if (65 <= eingabe.charAt(i) && eingabe.charAt(i) <= 90) {
			    		strAusgabe = strAusgabe + Character.toLowerCase(eingabe.charAt(i));
			    	} else {
			    		strAusgabe = strAusgabe + "_";
			    	}
			    }
		}
		System.out.println(strAusgabe);
 
Wegen den Klammern noch:

Sobald du die geschweiften Klammern weglässt "{" und "}" nach einem if bzw. else Statement, so bezieht sich dieses auch nur auf die nächst folgende Zeile. Da muss man sehr aufpassen, sowas fällt hinterher nämlich nicht mehr auf und keine IDE kann dir so einen logischen Fehler später anzeigen... 😀

lg basti
 

Zurück
Oben