if else if anfängerfrage

Diskutiere if else if anfängerfrage im Java Basics - Anfänger-Themen Bereich.
F

Fasta

Hallo, ich habe mich mal angemeldet weil ich java ein wenig lerne, komme aber hier nicht weiter anhand eines Übungs-Struktogrammes
mahnung.JPG

ich habe bisher das geschrieben,

Java:
import java.util.Scanner;

public class Mahnung {

    public static void main(String[] args) {
        System.out.println("Bezahlt?");
        Scanner scan = new Scanner(System.in);
        
        String eingabe = scan.next();
        
        String antwort = "nein";
        String antwort2 = "ja";
        if (eingabe.equals (antwort)){
            System.out.println("FM < AM");
        } else if (eingabe.equals (antwort2)){
            System.out.println("Ende");
        }
        scan.close();

    }

}

aber das geht natürlich nicht weiter in die nächste verzweigung. Wie geht es weiter in die nächste Verweigung?

Gruß
 
R

realodds

if (eingabe.equals (antwort)){ System.out.println("FM < AM"); }
Java:
if (eingabe.equals (antwort)){ 
System.out.println("FM < AM");
eingabe = scan.next();
if (eingabe.equals(antwort){
System.out.println("Mahnung");
} else if (eingabe.equals(antwort2){
// irgendwas machen
}
 }
 
T

temi

Ein kleiner Tipp von mir. Tu dir selbst einen Gefallen und achte darauf, wie du deine Variablen gut benennen kannst.
Java:
String antwort = "nein";
String antwort2 = "ja";

if (eingabe.equals(antwort)) { // was war gleich die Antwort? 42?
Das ist im Prinzip ein guter Ansatz, aber besser wäre ganz eindeutig:
Java:
String antwortNein = "nein";
String antwortJa = "ja";

if (eingabe.equals(antwortNein)) { // und schon muss man nicht mehr gucken was nun antwort noch mal war
Der üblicherweise gewählte Ansatz wäre es allerdings Konstanten zu definieren. In Java werden Konstanten normalerweise "final static" deklariert und der Name komplett groß geschrieben:
Java:
public class Mahnung {
    private final static String JA = "ja";
    private final static String NEIN = "nein";

    public static void main(String[] args) {
        // ...
        if (eingabe.equals(NEIN)) {
        // ...
    }
}
 
J

Joanna4321

Ein kleiner Tipp von mir. Tu dir selbst einen Gefallen und achte darauf, wie du deine Variablen gut benennen kannst.
Java:
String antwort = "nein";
String antwort2 = "ja";

if (eingabe.equals(antwort)) { // was war gleich die Antwort? 42?
Das ist im Prinzip ein guter Ansatz, aber besser wäre ganz eindeutig:
Java:
String antwortNein = "nein";
String antwortJa = "ja";

if (eingabe.equals(antwortNein)) { // und schon muss man nicht mehr gucken was nun antwort noch mal war
Der üblicherweise gewählte Ansatz wäre es allerdings Konstanten zu definieren. In Java werden Konstanten normalerweise "final static" deklariert und der Name komplett groß geschrieben:
Java:
public class Mahnung {
    private final static String JA = "ja";
    private final static String NEIN = "nein";

    public static void main(String[] args) {
        // ...
        if (eingabe.equals(NEIN)) {
        // ...
    }
}
Oder besser - Enum type definieren. :)
 
J

JennyL

J

Joanna4321

Quatsch...

ist völlig ausreichend, alles andere kostet nur Zeit (und Geld) sowohl beim Schreiben/Lesen wie auch beim Wiederverwenden/bei der Fehlerbehebung. Code muss nicht künstlich aufgebläht werden.

Allerdings sind zwei Buchstaben als Variablennamen fast immer zu wenig. Berechtigter Einwurf.
In generell es hängt von dem Projekt, aber was du geschrieben hast ist nicht richtig. Enum gibt die Typprüfung, String nicht. Wenn du typo machst die Compiler wird eine Warnung geben. Auch mit Enum ist es klar, welche Werten die Variable haben kann. Lesen sie Effective Java, wo das alles geschrieben ist.
 
L

LimDul

Kommt immer drauf an. Wenn ich wie hier in einem kleinen Beispiel in einer Klasse bin - da finde ich Enum auch Overkill. Und solange ich die Strings auch als Konstanten definiere, habe ich eine ähnliche Sicherheit gegen Typos - solange halt die Konstanten genutzt werden. Das wird halt schwierig, wenn ich es Klassenübergreifend nutzen will. Da ist dann ein Enum oft sinnvoller
 
J

JennyL

Lesen sie Effective Java,
Du brauchst mich nicht Siezen. Das habe ich gelesen. Mit Effektivität hat das nicht das Geringste zu tun. Es kommt wie gesagt auf den Scope an und dieser ist hier klar eingegrenzt. Aber ich finde es immer wieder schön wenn jemand bemüht ist es richtig zu machen und in ein paar Jahren wirst du es verstehen.
 
T

temi

Aber ich finde es immer wieder schön wenn jemand bemüht ist es richtig zu machen und in ein paar Jahren wirst du es verstehen.
Und ich finde es immer wieder traurig, dass diese Leute dann dumm von der Seite angemacht werden. Bist du sicher, dass du nicht Tobias heißt?
 
J

JennyL

Und ich finde es immer wieder traurig, dass diese Leute dann dumm von der Seite angemacht werden
Wenn ich antworte und nicht ganz richtig antworte, muss ich auch mit einer Berichtigung leben können, oder eben den Mund halten. Oder willst du mir jetzt sagen, dass falsche Antworten dem Verständnis dienlicher sind/seien als richtige?

... dann verwende hierbei eben Enums, ohne hierbei einen praktischen Nutzen durch diese gewinnen zu können...
 
T

temi

Wenn ich antworte und nicht ganz richtig antworte, muss ich auch mit einer Berichtigung leben können, oder eben den Mund halten. Oder willst du mir jetzt sagen, dass falsche Antworten dem Verständnis dienlicher sind/seien als richtige?
Erstens war die Antwort definitiv nicht falsch, denn bei mehreren Konstanten gleichen Typs kann es durchaus sinnvoll sein eine Enumeration als typsichere Alternative zu verwenden.

Zweitens macht der Ton die Musik. Vergleiche mal:
Kommt auf die Sichtweise und oder die Menge [...]
Kommt immer drauf an. Wenn ich wie hier [...]
Fällt dir was auf?
 
J

JustNobody

Das Thema hatten wir doch schon oft genug hier... Das ist halt die nette und freundliche Art von unserem Tobias.

Aber zu diesem OT Thema möchte ich nur anmerken:
Allerdings sind zwei Buchstaben als Variablennamen fast immer zu wenig. Berechtigter Einwurf.
Also das ist doch ein super Lernerfolg. Nach Massen an Code-"Lösungen" mit variablen s1, s2, ... ist das doch ein guter Ausblick. "Steter tropfen höhlt den Stein" - gewisse Lernerfolge sieht man da dann auch nach den ganzen Hinweisen in der Vergangenheit. Also statt sich über irgendwas womöglich zu ärgern sehe ich Grund zur Freude :)

Aber Schluss mit OT Kram. Der eigentliche Grund für meine Antwort ist natürlich ein anderer, denn ich will eine Aussage von @temi noch etwas erweitern.

Erstens war die Antwort definitiv nicht falsch, denn bei mehreren Konstanten gleichen Typs kann es durchaus sinnvoll sein eine Enumeration als typsichere Alternative zu verwenden.
Also ich sehe das nicht nur bezüglich der Anzahl der vorhandenen Konstanten sondern ggf. kommt da auch die Frage auf, wo das alles verwendet wird.

Und bei der Enumeration ist man auch direkt offen für:
- Refactorings um Code lesbarer zu machen / zu vereinfachen. Ist glaube ich auch schon etwas angeklungen, aber ist erst einmal egal.
- Offen für Erweiterungen - Evtl. will man das ja morgen Universeller machen. Die Enums können halt massiv erweitert werden, was bei einem String nicht geht.
- Code ist an einer klaren Stelle, wo er hin gehört, kein doppelter Code.

Die Konstanten sind gut, wenn man das wirklich nur an einer Stelle benötigt. Aber die Antworten ja/nein sind ja doch sehr universal.
Wenn man das als String Variablen definieren möchte, dann würde ich aber klar dazu raten, dass diese wirklich so wie von @temi in #4 gezeigt als Konstanten - also idealerweise public final static String

Und dann wird auch deutlich: Sobald man das in mehreren Klassen braucht, hat man entweder:
- doppelten Code (Die Konstanten sind in beiden Klassen vorhanden)
- unnötige Abhängigkeiten (Klasse1 hat dann ein Klasse2.Konstante)
- Oder man schiebt es in eine eigene Klasse, die dann als Sammelbecken dient: "Konstanten.Konstante" was auch extrem unschön ist.

==> Daher sehe ich auch, dass hier eine Klasse "Antworten" schnell Sinn machen kann. Und das sieht erst einmal nach einer reinen Aufzählung aus, daher bietet sich die spezielle Klasse "enum" an (Ehe ich angemacht(verhauen werde, weil jemandem die Bezeichnung als Klasse nicht passt: "a special kind of class type" JLS 8.9).
 
Thema: 

if else if anfängerfrage

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben