Java / Informatik: Was ist falsch?
public class Begrüßung {
public static void main(String[] args) {
int alter;
String geschlecht;
String name;
alter = InOut.readInt("Alter: ");
geschlecht = InOut.readString("Geschlecht(männlich/weiblich): ");
name = InOut.readString("Name: ");
if (geschlecht == männlich && alter >= 18) {
system.out.println("Guten Tag Herr" + name + "!");
}
if (geschlecht == weiblich && alter >= 18) {
system.out.println("Guten Tag Frau" + name + "!");
}
else {
system.out.println("Hallo" + name + "!");
}
}
}
Fehlermeldung:
Compiliere Begrüßung.java mit Java-Compiler
Begrüßung.java:9:23: error: cannot find symbol
if (geschlecht == männlich && alter >= 18) {
5 Antworten
geschlecht == männlich
Was soll das sein? Du meinst wohl eher:
geschlecht.equals("männlich")
Außerdem schreibt man System mit einem Großbuchstaben.
Du meinst vermutlich:
if (geschlecht == "männlich" && alter >= 18)
beziehungsweise richtig wäre
if (geschlecht.equals("männlich") && alter >= 18)
Um zu erklären, was da los ist, wenn du männlich ohne Anführungszeichen in Java schreibst, dann erwartet Java, dass es eine Variable namens männlich gibt. Du möchtest aber überprüfen, ob die Zeichenkette in der Variable geschlecht gleich der Zeichenkette männlich ist. Daher brauchst du ein sogenanntes "String Literal".
Wenn du eine Zeichenkette auf inhaltliche Gleichheit, also Buchstabe für Buchstabe, prüfen möchtest, dann musst du die Objektmethode "equals" nehmen. Nimmst du das doppelte Gleichheitszeichen, dann wird geprüft, ob die beiden Zeichenketten unter der gleichen Adresse liegen, grob gesagt, nicht ob sie inhaltlich gleich sind.
Kannst du das ganze auch nochmal auf hastebin.com oder pastebin.com hochladen? Dann bin ich auch bereit dir zu helfen
Ja, aber in Java gibt es keine Methode, die "InOut.<nochwas>" heißt.
Ich würde das Folgendermaßen machen:
https://hastebin.com/ocimodeheg.cs
bei Fragen bitte her damit
Begrüßung.java:9:23: error: cannot find symbol
sollte theoretisch diese Zeile sein ...
if (geschlecht == männlich && alter >= 18) {
du hast keine Variable namens männlich ...
Zudem vergleicht man Strings nicht auf diese Weise - die korrekte Art wäre (für String s1 und s2):
s1.equals(s2)
Das Programm muss so aussehen, dass der Nutzer selbst bestimmt ob er männlich oder weiblich ist.
Deshalb:
geschlecht = InOut.readString("Geschlecht(männlich/weiblich): ");
Kann ich das nicht so machen?
- lies doch mal, was ich geschrieben habe ... deine erwähnte Zeile Code hat nichts mit meiner Antwort zu tun ...
- mir sagt jetzt die Klasse InOut nichts, das ist kein Bestandteil vom Standard-Java - daher kann ich das so nicht wirklich beantworten ...
Das ist ok so.
Für alle zur Erklärung: Die Implementation von readString sieht so aus:
public static String readString(String prompt) {
System.out.print(prompt);
return readln();
}
Die Methode readln wiederum nutzt einen BufferedReader, um Daten von der Konsole einzulesen.
Das Geschlecht männlich gibt es nicht du musst in der Abfrage nach Geschlecht als String abfragen
https://pastebin.com/khF0FSSs