Artox Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 Hy ich bin noch blutiger Anfänger versuche mir aber ein paar Grundkenntnisse von Java anzueignen. Hier mein Problem public class Familie { public static void main(String[] args) { String Frau="Erna"; String Mann="Hans"; String Sohn="Jens"; String Tochter="niki"; if(Frau=="Erna") if(Mann=="Hans") if(Sohn=="Jens") if(Tochter=="niki") System.err.println("Frau: "+Frau+", Mann: "+Mann+", Sohn: "+Sohn+" und Tochter: "+Tochter+" sind eine Familie"); else System.err.println("Das ist nicht die richtig Familie"); } } Mein Problem ist die Else wird nur ausgeführt wenn ich die Var Tochter ändere, ich möchte aber das es so ist egal welche Var[/] ich ändere soll der Text unter Else ausgegeben werden Zitieren
Crush Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 if(Frau=="Erna" && Mann=="Hans" && Sohn=="Jens" && Tochter=="niki") ... dann else ... sonst Zitieren
kingofbrain Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 Hallo, und bitte verwende nicht == zum Vergleich. Damit vergleichst Du Objektinstanzen. Das funktioniert hier wegen Javas Stringhandling und Deiner Initialisierung zufällig, ist aber nicht das, was Du willst. Du willst den Inhalt der Strings vergleichen. Das geht mit der Methode equals(Object o). Peter Zitieren
Artox Geschrieben 1. Januar 2007 Autor Geschrieben 1. Januar 2007 Danke für die schnelle Antwort das Kapitel mit den logischen Operator hätte ich mir doch genauer ansehen sollen naja beschäftige mich mit java erst ne woche Zitieren
Artox Geschrieben 1. Januar 2007 Autor Geschrieben 1. Januar 2007 kannst mir das mit der equals Methode an meinem beispiel zeigen weiss das nur so String a = new String("Test"); String b = new String("Test"); if(a.equals() System.out.println("Richtig") else System.err.println("Falsch") aber nicht wie ich es in meinem anderen Fall benutzen soll Zitieren
geloescht_Newlukai Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 Man stelle sich die Klasse Farbe vor: class Farbe { private String farbe; public Farbe(String farbe) { this.farbe = farbe; } } Du erzeugst zwei Farben und vergleichst sie: public void test() { Farbe rot1 = new Farbe("rot"); Farbe rot2 = new Farbe("rot"); System.out.println(rot1 == rot2); } Der Test ergibt false, da es zwei unterschiedliche Objekte sind. Allerdings sichern sie ja die gleiche Farbe, sollten bei einem Vergleich also auch als gleich erkannt werden. Daher gibt's in Object die Methode equals, die man überschreiben sollte. EDIT: OK. Post nicht ganz gelesen. In Deinem Fall. Hmm. Ich rate Dir, da Du blutiger Anfänger bist , eines der empfohlenen Bücher anzulesen um einen Einblick in das Programmieren zu bekommen. Zu Deinem Problem: Ein Vergleichsausdruck kann auch aus mehreren logisch verknüpften Ausdrücken bestehen: public class Familie { public static void main(String[] args) { String Frau="Erna"; String Mann="Hans"; String Sohn="Jens"; String Tochter="niki"; if(Frau=="Erna" && Mann=="Hans" && Sohn=="Jens" && Tochter=="niki") { System.err.println("Frau: "+Frau+", Mann: "+Mann+", Sohn: "+Sohn+" und Tochter: "+Tochter+" sind eine Familie"); } else { System.err.println("Das ist nicht die richtig Familie"); } } } Zitieren
Artox Geschrieben 1. Januar 2007 Autor Geschrieben 1. Januar 2007 Mhh eigendlich wollte ich ja nur , da ich blutiger anfänger bin , und eine menge Bücher momentan lese^^. Möchte nur gerne wissen wie ich in meinem beispiel die Strings mit hilfe von equals vergleichen kann Zitieren
geloescht_Newlukai Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 Man ersetze Frau=="Erna" durch Frau.equals("Erna") usw. Wolltest Du das wissen? Zitieren
Artox Geschrieben 1. Januar 2007 Autor Geschrieben 1. Januar 2007 Super danke haut hin und funzt da kann ich mich ja meiner nächsten herausforderung stellen bzw. Soll jetzt nicht dumm klingen. Mein ziehl ist es eigendlich nur noch keine vordefinierten Var zu benutzen sonder Das ich in der Konsole selber meine Strings eingeben kann das habe ich mit zahlen schon geschaft aber mit einer Zeichenkette bzw einem namen gelingt es mir nicht wer kann mir da einfach und verständlich helfen Zitieren
geloescht_Newlukai Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 Dann zeig' doch mal den Code für die Zahlen. Dann ziehen wir das etwas didaktischer auf. Sollst ja auch was lernen Zitieren
Artox Geschrieben 1. Januar 2007 Autor Geschrieben 1. Januar 2007 import java.io.*; public class Test { public static void main(String[] args) throws IOException { int a, b, c; BufferedReader din = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Bitte Zahl a eingeben: "); a = Integer.parseInt(din.readLine()); System.out.println("Bitte Zahl b eingeben: "); b = Integer.parseInt(din.readLine()); c = a + b; System.out.println("a+b="+c); } } Das ist jetzt als Übung als Zahleneingabe, so ist mir da alles klar bis auf throws IOException nun ist es so wenn ich die Var mit String Deklarieren möchte heist es halt immer Konvertierung von String auf int nicht möglich. An sich möchte ich das es so funzt wie mein erstes beispiel public class Familie { public static void main(String[] args) { String Frau="Erna"; String Mann="Hans"; String Sohn="Jens"; String Tochter="niki"; if(Frau=="Erna" && Mann=="Hans" && Sohn=="Jens" && Tochter=="niki") { System.err.println("Frau: "+Frau+", Mann: "+Mann+", Sohn: "+Sohn+" und Tochter: "+Tochter+" sind eine Familie"); } else { System.err.println("Das ist nicht die richtig Familie"); } } } nur das halt die Var nicht vorgegeben sind sonder die namen eingegeben werden und dann über If überprüft werden und dann halt für true oder false entschieden wird Wie gesagt ich stehe noch am Anfang Zitieren
diesy Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 Hier mal eine "Eingabe-Klasse", die uns mal gegeben wurde: import java.io.*; /** Die Klasse enthält Eingabemethoden für die * Eingabe eines Strings mit und ohne Eingabeaufforderung *Eingabe eines Zeichens mit und ohne Eingabeaufforderung *Eingabe einer Zahl (integer) mit und ohne Eingabeaufforderung **/ public class eingabe { /** Eingabe eines String ohne Eingabeaufforderung ******* * die Methode liefert einen String zurück, der über Tastatur eingeben wurde **/ public String eingString() { String sin = " "; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { sin=in.readLine(); } catch(IOException e) { System.out.println(e.toString()); } return sin; } /** Eingabe eines String mit Eingabeaufforderung ******* * die Methode liefert einen String zurück, der über Tastatur eingeben wurde **/ public String eingString(String s) { String sin = " "; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print(s); sin=in.readLine(); } catch(IOException e) { System.out.println(e.toString()); } return sin; } /** Eingabe eines Zeichens ohne Eingabeaufforderung ******* * die Methode liefert ein zeichen zurück, das über Tastatur eingeben wurde **/ public char eingChar() { char cin = ' '; DataInputStream in = new DataInputStream(System.in); try { cin=in.readChar(); System.out.print("..." + cin); } catch(IOException e) { System.out.println(e.toString()); } return cin; } /** Eingabe eines Zeichens mit Eingabeaufforderung ******* * die Methode liefert ein zeichen zurück, das über Tastatur eingeben wurde **/ public char eingChar(String s) { char cin = ' '; DataInputStream in = new DataInputStream(System.in); try { System.out.print(s); cin=in.readChar(); } catch(IOException e) { System.out.println(e.toString()); } return cin; } /** Eingabe eines Integer ohne Eingabeaufforderung ******* * die Methode leist einen String ein und wandelt ihn in int **/ public int eingInt() { Integer i = new Integer(eingString()); return i.intValue(); } /** Eingabe eines Integer mit Eingabeaufforderung ******* * die Methode leist einen String ein und wandelt ihn in int **/ public int eingInt(String s) { Integer i = new Integer(eingString(s)); return i.intValue(); } } Kannst dir das richtige rauskopieren. Zitieren
Jaraz Geschrieben 1. Januar 2007 Geschrieben 1. Januar 2007 @Artox bitte benutze Tags anstatt Tags für Quellcode. Gruß Jaraz Zitieren
Artox Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 public class Main { public static void main(String[] args) throws IOException { String Mann; String Frau; String Kind; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Wie heist der Mann: "); Mann = in.readLine(); System.out.println("Wie heist die Frau: "); Frau = in.readLine(); System.out.println("Wie heist das Kind: "); Kind = in.readLine(); if(Mann.equals("Hans") && Frau.equals("Ella") && Kind.equals("Timm")) System.err.println(" JA "+Mann+" , "+Frau+" und "+Kind+" sind eine Familie "); else System.err.println("Sie sind nicht die richtige Familie"); } } So soweit bin ich jetzt erstmal gekommen meine Frage was hat es mit throws IOException aufsich Zitieren
geloescht_Newlukai Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 Verstehst Du denn auch den Code, den Du geschrieben hast? Bitte nicht falsch verstehen. Ich will Dir nicht auf den Schlips treten, sondern nur wissen, ob Du Dir Grundlagen erarbeiten konntest. Das mit der IOException ist ein wenig komplexer. Java hat Exception-Handling "eingebaut". Ein kleines Beispiel: Integer.parseInt("Hallo"); Wie Du wohl schon weißt, kann die Methode parseInt(String) der Klasse Integer aus einem String (sprich Text) die Zahl lesen und diese zurückgeben (als int). Doch bei obigem Beispiel enthält der String keine Zahl, sondern tatsächlich Text. Jetzt ist die Frage, was die Methode denn zurückgeben kann. Der Rückgabebereich beschränkt sich ja auf den Wertebereich des Datentyps int. Also Zahlen von -Schlagmichtot bis +Schlagmichtot. Viele Programmierer würden bei obigem Aufruf eine 0 oder -1 zurückgeben. Doch das ist fachlich vollkommen verkehrt, da sie von den Rückgaben der korrekten Aufrufe: Integer.parseInt("0"); Integer.parseInt("-1"); nicht zu unterscheiden sind. Und hier greift das Exception-Handling. Denn in diesem Fall würde die Methode eine "NumberFormatException" (weiß nicht mehr, wie sie richtig heißt) "werfen": public static int parseInt(String s) throws NumberFormatException Und diese kannst Du "abfangen": try { Integer.parseInt("Hallo"); } catch(NumberFormatException e) { System.out.println("Bitte geben Sie eine Zahl ein!"); } Sinn und Zweck des Ganzen ist es, daß Du als Programmierer auf Fehler reagieren kannst um dem Anwender bspw. die Möglichkeit zu geben, seine Eingaben zu korrigieren. Und so ist es auch mit der IOException. Die signalisiert nur, daß ein Fehler bei der Datenübergabe aufgetreten ist. Würdest Du z. B. eine Datei auslesen und sie würde während dem Auslesen gelöscht werden, reagiert der Buffer mit dem Werfen eine IOException. Zitieren
Artox Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 Also verstehen und verstehen sind einerlei Wenn ich ne einfache Main Klasse erzeugen soll und sie mit ner einfachen For Schleife durchlaufen lasse kann ich das sicher erklären. (Dazu gesagt ich beschäftige mich erst seit 2 Wochen mit Java und beine einzigen Vorkenntnisse belaufen sich auf Java) Bei dem input beispiel ist es so ich versuche das mal in meine Worte zu fassen import java.io.*; // Importieren des Paketes java.io public class Main // Deklarieren der Klasse Main { public static void main(String[] args) // Naja ne klasse erzeugen ??? throws IOException // ?? { String Mann; // String Var Mann String Frau; // ... String Kind; // .... BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Wie heist der Mann: "); // Text wird ausgegeben Mann = in.readLine(); // ??? System.out.println("Wie heist die Frau: "); // Text ... Frau = in.readLine(); System.out.println("Wie heist das Kind: "); Kind = in.readLine(); if(Mann.equals("Hans") && Frau.equals("Ella") && Kind.equals("Timm")) System.err.println(" JA "+Mann+" , "+Frau+" und "+Kind+" sind eine Familie "); // If anweisung mit True false entscheidung ansonsten else Vergleich über equals else System.err.println("Sie sind nicht die richtige Familie"); So ich weiss die meisten haben mehr ahnung sicher b ich bin keiner habe einen Computer und schon kann ich programmieren nein ich will lernen , kann ich aber nur wenn ich logisch verstehe war schon nicht so einfach aus der vorlage mit der String sache das richtige zu machen das das ja nÃcht einfach mit copy past geht da ja dann die Main klasse fehlt hat. usw Zitieren
geloescht_Newlukai Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 Hmm. Achso. Aber Dir das alles zu erklären, würde den Rahmen hier sprengen, denn Java bietet einiges mehr. Alleine die Erklärung der OOP würde schon einiges verschlingen und das ist eines der Grundkonzepte von Java. Daher würde ich Dir zur Lektüre eines der empfohlenen Bücher raten. Ich habe von denen allerdings nur "Java ist auch eine Insel" gelesen, daher kann ich nichts über die anderen sagen. Jedenfalls reicht es, wenn Du Dir zu Anfang mal die ersten Kapitel anschaust. Da wird schon einiges erklärt. Zitieren
Artox Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 Was ich noch nicht so ganz verstehe ist Alos ich erzeuge die Datei Main public class Main dann Deklariere ich die public static void main(String[] args) main Methode { Da gebe ich meinen Methoden Rumpf ein } gehen wir mal davon aus ich will ein einfaches Farge antwort Programm erzeugen public class Antwortspiel { public static void main(String[] args) throws IO Exception String User; Strring JaNein; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // was da passiert weiss ich noch nicht System.out.println("Hallo bitte gebe deinen Spieler Namen ein: "); User = in.readLine(); // hier kann man seinen Namen eingeben und weiter ?? System.out.println("Hallo "+User+" das ist ein Spiel willst du Spielen \n Ja/nein) JaNein = in.readLine() // Ja nein Eingeben if(JaNein.equals("Ja") So hier sollte das in die Methode gewechselt wo das spiel weiter geht WIE ?? ; else So hier sollte in die die Methode gewechselt werde die alles Beendet ich möchte hier keine fertigen Quelltexte habe sonder eine Logische erklärung habe leider keinen Lehrer Zitieren
Artox Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 Ich arbeite mit zwei büchern , mir ist schon klar das ich nicht in 4 Wochen alles lernen kann oder Doch ??? ^^ mir reicht es eigendlich wenn ich abundzu bei einem problem wo ich hänge hilfe bekomme Zitieren
Jaraz Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 if(JaNein.equals("Ja") So hier sollte das in die Methode gewechselt wo das spiel weiter geht WIE ?? ; Es gibt keinen eindeutigen Weg. Ein objektorientierter Ansatz wäre zum Beispiel: if(jaNein.equals("Ja"){ Spiel spiel = new Spiel(); spiel.starteSpiel(user); } Gruß Jaraz PS: Variablen und Methoden bitte mit kleinen Buchstaben beginnen lassen. Klassen wie geschehen, aber mit großen Buchstaben. Zitieren
geloescht_Newlukai Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 OK. Sicher helfen wir Dir hier bei dem ein oder anderen Problem. BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // was da passiert weiss ich noch nicht Es ist nicht schlimm, das nicht zu verstehen. In dem von mir erwähnten Buch ist diesem Thema ein ganzes Kapitel gewidmet. Um das verstehen zu können, mußt Du Dich erst mal in der OOP zurechtfinden. Für den Moment reicht es, zu wissen, daß Du hiermit ein Objekt erzeugst (namens "in"), mit dem Du auf der Konsole eine Benutzereingabe realisieren kannst, was Du hier User = in.readLine(); // hier kann man seinen Namen eingeben und weiter ?? ja auch tust. Die Methode readLine() liest Zeichen ein, bis der Anwender ENTER betätigt. Gut, ganz so simpel ist es nicht, aber das reicht fürs erste. if(JaNein.equals("Ja") So hier sollte das in die Methode gewechselt wo das spiel weiter geht WIE ?? ; Na zum Beispiel so: public class Antwortspiel { public static void main(String[] args) throws IO Exception { String user; String jaNein; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Hallo bitte gebe deinen Spieler Namen ein: "); User = in.readLine(); System.out.println("Hallo "+User+" das ist ein Spiel willst du Spielen \n Ja/nein); jaNein = in.readLine(); if(jaNein.equals("Ja")) { startGame(); } else { System.out.println("Spieler wollte gar nicht spielen ..."); } System.out.println("Spiel wird beendet ..."); System.exit(0); } private static void startGame() { System.out.println("Spiel gestartet ..."); } } Zitieren
Artox Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 Es gibt keinen eindeutigen Weg. Ein objektorientierter Ansatz wäre zum Beispiel: if(jaNein.equals("Ja"){ Spiel spiel = new Spiel(); spiel.starteSpiel(user); } Gruß Jaraz PS: Variablen und Methoden bitte mit kleinen Buchstaben beginnen lassen. Klassen wie geschehen, aber mit großen Buchstaben. Wenn ich es richtig verstehe wird bei Spiel spiel = new Spiel(); wird die Variable spiel deklariert und initialisiert und dem Objekt Spiel zugeordnet oder ?? aber was passiert bei spiel.starteSpiel(user); Zitieren
Artox Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 @Newlukai Danke das war genau das was ich erstmal brauchte das mit dem private static void NAME() {} so komme ich erstmal weiter jetzt tippe ich erstmal und festige das OOP ist die nächste etappe Zitieren
Artox Geschrieben 2. Januar 2007 Autor Geschrieben 2. Januar 2007 Kann man das so machen das ich ein Parr grund VAr und das BufferedReader in so ne art Paket packe und in den Methoden aufrufen kann so muss ich sonst in jeder Methode das ganze throws IO Exception und BufferedReader neu eingeben und die Namens Var vom anfang ist ja auch wech Zitieren
diesy Geschrieben 2. Januar 2007 Geschrieben 2. Januar 2007 Du brauchst eigentlich nur die Klasse, die ich gepostet habe in eine Datei namens eingabe.java zu kopieren. (Du kannst/musst mal hier noch den Namen groß schreiben, sowohl in der Datei als auch in der Klasse) und dann einfach in jedem Programm mittels: Eingabe eing = new Eingabe(); String hans = eing.eingString() aufrufen um z.B. einen String einzugeben. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.