Verzweigungen

cooki

Mitglied
hallo,

ich habe die ehrenvolle Aufgabe bekommen, dass ich mit der Verzweigung folgende Aufgabe lösen soll:

Wenn buchstabe = j, dann "ja", sonst "nein"

Da ich erst seit kurzem mich mit dem Programm befasse, komm ich nicht auf den Lösungsweg.

Könnte mir bitte eine/r helfen?!:(

Folgenden Ansatz habe ich...

[JAVA=42]String ergebnis;
String buchstabe = null;
if (buchstabe=="j")
{ergebnis="ja";
tfErgebnis.setText(ergebnis);
}
else
{ergebnis="nein";
tfErgebnis.setText(ergebnis);
}[/code]
 

Nicer

Bekanntes Mitglied
Java:
public boolean jEnthalten(String buchstabe){
if(buchstabe.equals("j")){
return true;
}
else
{
return false;
}
}

so sähe dass dann aus.

in der hauptmethode machst du dann :

Java:
jEnthalten("a"); // gibt false zurück
jEnthalten("j"); // gibt true zurück
 
Zuletzt bearbeitet:

cooki

Mitglied
Vielen Dank für die Vorschläge, aber leider verstehe ich das nicht ganz...:oops:

Ich hab's vorher nur Zahlen gearbeite und jetzt soll ein "j" eingegeben werden. Beim mir ist das Problem, dass ich nur "nein" herausbekomme. Kann ich nicht das irgendwie auch mit char lösen?
 

0din

Bekanntes Mitglied
wenn du objekte (was strings sind) mit "==" vergleichen willst, wird auf (!) identisch (!) geprüft... also ob die zwei objekte identisch sind... was eig nie der fall sein wird, wenn du nich grade versuchst ein objekt mit sich selbst zu vergleichen.
bei objekten wird, wie schonmal erwähnt, mit .equals() gearbeitet... die klasse Object hat die methode schon also kannste das auch bei strings oder eigenen datentypen gebrauchn.
.equals() prüft dann auch nicht nur dumm ob es das exakt selbe objekt ist, sondern ob die zwei vom inhalt her gleich sind
 

Nicer

Bekanntes Mitglied
Java:
public boolean jEnthalten(char buchstabe){
if(buchstabe == 'j'){
return true;
}
else
{
return false;
}
}

so sähe das ganze mit Char aus :)
 

cooki

Mitglied
hey,

danke für den Vorschlag, aber bei mir makriert es die geöffnete Klammer vor char und die geschlossene Klammer nach buchstabe rot. Woran könnte das liegen?
 

eRaaaa

Top Contributor
Vermutlich hast du es an die falsche Stelle geschrieben, z.B. in eine Methode(wahrscheinlich die main?? )...

Der Code von Nicer ist ja selbst schon eine Methode, die kannst du also nicht so einfach in die main schieben......zeige mal deinen aktuellen Code
 

cooki

Mitglied
hallo eRaaaa,

so sieht mein aktueller code aus

Java:
	String ergebnis;
				
					

					
					public boolean jEnthalten (char buchstabe) {
					if(buchstabe == 'j')
					{ergebnis="ja";
					tfErgebnis.setText(ergebnis);
					}
					else
					{ergebnis="nein";
					tfErgebnis.setText(ergebnis);
					}
					}
 

Haave

Top Contributor
Hab mal was geschrieben (hab jedoch zum Einlesen die Klasse BufferedReader verwendet, da ich nicht weiß, wo deine Methode setText() herkommt):

Java:
import java.lang.Object.*;
import java.io.*;

class Something {
	
	public static void main(String[] args) {
		System.out.println(jEnthalten());
	}

	static String jEnthalten() {
		BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
		char buchstabe = 0;
		String ergebnis = null;
		try {
			buchstabe = (char)eingabe.read();
		} catch (Exception ex) {
			System.out.println("Falsche Eingabe");
		}
		if(buchstabe == 'j') {
			ergebnis = "ja";
		} else {
			ergebnis = "nein";
		}
		return ergebnis;
	}
}

Das boolean habe ich rausgeschmissen, weil du ja ohnehin direkt ein "ja" bzw. "nein" (also einen String) zurückgeben willst. Zudem bin ich mir mit der Exception unsicher und habe sie nur reingeschrieben, weil der Compiler es forderte - ist für mich noch völlig neues Terrain :oops:
Ich hoffe, ich konnte trotzdem ein wenig helfen...
 

Landei

Top Contributor
Kompliziert ist hier nur das Einlesen, die eigentlich Verzweigung (Zeile 19-23) ist total simpel (etwas einfacher wäre das Einlesen mit der Klasse Scanner, aber darum geht es ja hier nicht)
 

cooki

Mitglied
die Verzweigung an sich ist nich schwer. ich verstehe nur nicht was ihr mit der Klasse scanner oder der anderen mein

tut mir leid, dass ich solch große Probleme bereite :(
 

Haave

Top Contributor
Damit geht es auch, wenn dein j nicht unbedingt vom Typ char sein muss, sondern auch String sein kann (weiß nicht, ob Scanner das Einlesen von chars unterstützt) - dann kannst du es, wie oben bereits geschrieben wurde, auch mit equals() machen:

Java:
import java.util.Scanner;

class Something {
	
	public static void main(String[] args) {
		System.out.println(jEnthalten());
	}

	static String jEnthalten() {
		Scanner eingabe = new Scanner(System.in);
		String buchstabe = null;
		String ergebnis = null;
		buchstabe = eingabe.next();
		if(buchstabe.equals("j")) {
			ergebnis = "ja";
		} else {
			ergebnis = "nein";
		}
		return ergebnis;
	}
}

Was genau verstehst du denn nicht? Wozu eine Klasse wie Scanner gut ist? (Ich hoffe, ich habe dich damit jetzt nicht vollends verwirrt... :/)
 

0din

Bekanntes Mitglied
mein lehrer erklärt mir des irgendwie anders

lehrer habn ihre bildung aus büchern wie "Java for Dummies".... zumindest die, die ich so kenn... ^^ da biste hier besser bedient

ich mops mir ma den code von haave un schreib dirn paar kommentare dazu ^^ vllt raffste dann mehr

Java:
import java.lang.Object.*;
import java.io.*; //das io package hat die reader klassen, muss daher importiert sein
 
class Something {
    
    public static void main(String[] args) {
        System.out.println(jEnthalten()); //gibt das aus was jEnthalten() zurück liefert
    }
 
    static String jEnthalten()  //static damit die main ohne objekt erzeugung damit arbeiten kann
    {
        BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); //ein bufferedreader der die konsolen eingaben ausließt
        char buchstabe = 0; //eine (wichtig) char variable
        String ergebnis = null; //das is der return string der in der main ausgegeben wird
        try  //try-catch... versuch-fangab.... er versucht das try, wenn da irgendwas ne exception wirft gehts in den catch block un der code da wird ausgeführt
        {
            buchstabe = (char)eingabe.read(); //hier wird die eingabe in der konsole ausgelesen und zum char gecastet (umgewandelt)
        } 
        catch (Exception ex) 
        {
            System.out.println("Falsche Eingabe"); //wenn das casten oder so net geht, wird das ausgedruckt
        }

        if(buchstabe == 'j')  //wenn der char "buchstabe" identisch mit 'j' ist...
           {
               ergebnis = "ja"; //...ist das ergebnis "ja"
            } 
        else 
           {
               ergebnis = "nein"; //...sonst "nein"
           }

        return ergebnis; //un hier wird das "ja" oder "nein" zur main gegeben un von der dann ausgegeben
    }
}

das is nu das maximale an erklärung... ^^ mehr kann man eig net erklärn
ich hoffe das hilft dir zu verstehn was gemacht wird ;)

haste denn mittlerweiln verstanden warum die meisten leute hier ehr mit char arbeiten würden?
 
G

Gastredner

Gast
Hilfreich kann es sein, auch selbst mal einen Blick in ein Buch zu werfen, z. B. in die Java-Insel.
Hilfreich für dich könnte vielleicht der Abschnitt zum BufferedReader sein: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.7 Datenströme filtern und verketten
Prinzipiell wäre es vielleicht am besten, wenn du dir das gesamte Kapitel durchlesen würdest, damit du das System mit der EIngabe korrekt verstehst - wäre aber momentan vielleicht auch ein wenig Overkill.

Ein anderes Buch, das ich empfehlen kann, ist das Handbuch der Java-Programmierung, damit habe ich selbst angefangen. Das Buch gibt es als HTML-Version kostenlos zum Herunterladen. Für dich interessant wäre vielleicht das Kapitel 18.

Bzgl. der Frage nach dem Datentyp char: Genau, ein Vergleich über String-Objekte ist aufwendiger. Während man bei einem char den Vergleichsoperator benutzen kann, muss man Strings - wie alle Objekte - über die equals()-Methode vergleichen. Außerdem ist es sinnvoll, bei Operationen immer den passenden Datentyp zu verwenden - und für einzelne Zeichen ist dies char. Ein char verbraucht weniger Speicher als ein String und ich könnte mir vorstellen, dass Operationen auf/mit chars schneller laufen als auf Strings. Wobei dies bei einem so kleinen Rahmen wie hier vernachlässigbar ist.;)
 
Zuletzt bearbeitet von einem Moderator:

0din

Bekanntes Mitglied
nich unbedingt, string wäre bei mir sogar schneller implementiert... ^^

aber die char lösung verhindert für uns, dass wir dir datentypen un vorallem den sinn un unsinn von == bzw equals erklärn müssen und für dich isses leichter weil du nix dolles neues (equals, datentypen) lernen musst
 
M

maki

Gast
nich unbedingt, string wäre bei mir sogar schneller implementiert... ^^

aber die char lösung verhindert für uns, dass wir dir datentypen un vorallem den sinn un unsinn von == bzw equals erklärn müssen und für dich isses leichter weil du nix dolles neues (equals, datentypen) lernen musst
Dafür müsste man Exceptions & zumindest ein bisschen von deren handling erklären, dazu noch BufferedReader, InputStreamReader, System.in und char.... kann das Argument String vs. Char wirklich nicht nachvollziehen.

@cooki,

was sollst du denn nun machen?
Eine GUI aufbauen, von der Kommandozeile einlesen, oder nur zwei Strings vergleichen?
 

cooki

Mitglied
hmmm.. bei mir heißt des irgendwie

Java:
public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("actionPerformed()");

kanns es daran liegen?
 

0din

Bekanntes Mitglied
wo kommt das denn nu her? das klingt nämlich nach nem action listener un davon war bis nu no keine rede, oder ich hab was verpasst


un am rande,
actionPerfomed(java.awt.event.ActionEvent e)
is eig
actionPerformed(ActionEvent e)
nur das bei dem unteren das java.awt.event.ActionEvent importiert werden muss un die erste den import umgeht
 

cooki

Mitglied
also mir wurde es so bei gebracht....

1. java project öffnen
2. class öffnen
3. visual class öffnen

Anschließend erstelle ich im Fram label, textfeld und button. Beim Button wird dann action perfomed aktieviert. Und erst dann kann man programmieren, laut Aussage vom Lehrer. Ich hab's nicht anders gelernt^^
 

0din

Bekanntes Mitglied
gott wie grottig XD wasn des fürn lehrer... der fängt ja mittendrinne an un hängts euch stumpf an XD

wenn das so is musste in der actionPerformed das textfeld auslesen, den wert dann erst in char umwandeln un dann abgleichen...
ich schreibs mal ala gedächtnis:
actionPerformed(ActionEvent e)
if(e.getSource().equals(OkButton))
{
String txt = TextFeld.getText();
jEnthalten(txt);
}

un dann jEnthalten(String txt)
char txtc = txt in char umwandeln
un die abfragen wie im code bis dahin
dann noch SysOut mit dem ergebnis

EDIT:
kein sysout sonder textfeld.setText(ergebnis);
sysout wird dabei net gehh
 
G

Gastredner

Gast
Und das ist der Grund, warum ich der Meinung bin, man sollte mit Konsolenprogrammen anfangen...lustig GUIs zusammenklicken, dafür aber keine Ahnung von grundlegender IO.

Wenn du eine GUI hast, wirst du ja sicherlich auch die entsprechenden Textfelder für die Eingabe haben. Ich würde es in etwa so machen:
Java:
public void actionPerformed(ActionEvent event) {
	// Annahme: Dein Eingabe-Textfeld heißt tfEingabe
	char c = tfEingabe.getText().charAt(0);	// Der erste Buchstabe der Eingabe.
	String ergebnis = "nein";
	if (c == 'j') {
		ergebnis = "ja";
	}
	// Annahme: Dein Textfeld für das Ergebnis heißt tfErgebnis
	tfErgebnis.setText(ergebnis);
	/*
	Alternative Verzweigung:
	
	String ergebnis;
	if (c == 'j') {
		ergebnis = "ja";
	} else {
		ergebnis = "nein";
	}
	
	In diesem Fall wird der String ergebnis nicht im Voraus mit
	dem Inhalt "nein" befüllt.
	*/
}
Dieser Code sollte so laufen, hat aber noch einen Fehler: Steht in dem Textfeld tfEingabe kein Text, sollte ein Fehler auftreten. Die Prüfung auf diesen Fall habe ich mir jetzt einfach mal gespart.
 

0din

Bekanntes Mitglied
kommste damit denn nu zurecht? ^^

solltest dich bei dem ma beschwern... gui zusammen klicken un net sagn was an logik dahinter muss... das is scho ne frechheit
ich würd ja vorschlagn glei auf konsolen anwendungen umzusteign, die sin da etwas einfacher
 

cooki

Mitglied
un dann jEnthalten(String txt)

das programm unterstricht mir das txt, aber sonst ist alles korrekt, laut plan.

ach, mein lehrer is ja so genial :lol: werd ich ihm ausrichten
 

Nicer

Bekanntes Mitglied
Auch wenn ihr nu eine Lösung habt , würde ich dir dringenst empfehlen erstmal auf Consolen Ebene anzufangen , bevor du das auf solch Grottige ( xD @0din ) und blöde weise lernst.
 

Ähnliche Java Themen

Neue Themen


Oben