if-else

Good evening,
i´m at the beginning of learning java and i have a question to a code i wrote which isn´t working like it should.
Following you´ll see it:

package Kapitel_4;
import java.util.Scanner;
public class Schrauben
{

public static void main(String[] args)
{
//Scanner
Scanner scan = new Scanner(System.in);
System.out.println("Bitte geben Sie den Durchmesser der Schraube ein.");
int durchmesser = scan.nextInt();
System.out.println("Bitte geben Sie die Länge der Schraube ein.");
int länge = scan.nextInt();
scan.close();
//Variablen boolean
boolean durchmesser1 = (0 < durchmesser < 3);
boolean durchmesser2 = (4 < durchmesser < 6);
boolean durchmesser3 = (7 < durchmesser < 20);

boolean länge1 = (0 < länge < 20);
boolean länge2 = (21 < länge < 30);
boolean länge3 = (31 < länge < 50);
//Verzweigung
if (durchmesser1 && länge1)
{
System.out.println("Typ 1");
}
else if (durchmesser2 && länge2)
{
System.out.println("Typ 2");
}
else if (durchmesser3 && länge3)
{
System.out.println("Typ 3");
}
else
{
System.out.println("Unbekannter Schrauebntyp");
}
}

}

Syntax error on token "<", << expected
Syntax error on token "<", << expected
Syntax error on token "<", << expected
Syntax error on token "<", << expected
Syntax error on token "<", << expected ...

... it says and means the things i highlighted.

I don´t understand why i need a << and a < isn´t working.

And if i write << the whole program isn´t working and the only thing you see on the console is "Typ 1".

i don´t understand.

please help me.

good night



post scriptum (p.s.):
I´m sorry that the program is in german. I´m from Germany. Maybe if you want you can answer in german.
 

KonradN

Super-Moderator
Mitarbeiter
Da dies ein deutschsprachiges Forum ist, sollten wir auch Deutsch nutzen …

Als ersten Punkt: Code bitte immer in Code Tags posten. Dazu einfach den Knopf </> links oberhalb des Eingabebereiches nutzen.

Dann ist eine Operation wie a < b < c eine Zusammensetzung von Operationen, die dann von links nach rechts ausgewertet würden. Also erst a<b was dann true oder false wäre und dann eben dieser Boolean Wert < c was dann keinen Sinn mehr ergeben würde.

Daher sind das zwei Vergleiche und du willst wissen, ob beides wahr ist. Also ein a<b und b<c

Edit: Typo angepasst.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Ach ja - was ich jetzt noch als offenen Punkt sehe: < vs. <<:

< ist ein Vergleichsoperator. Dieser vergleicht den linken mit dem rechten Wert um dann true oder false zurück zu geben.
a < b prüft also, ob a kleine b ist um dann entweder true (a ist kleiner) oder false (a ist nicht kleiner) zurück zu geben.

<< ist ein Shift Operator. Zahlen werden ja nur als sogenannte Bits gespeichert. 8 Bist sind dabei ein Byte und die Datentypen haben eine gewisse Grösse. Ein int hat so 4 Bytes, also 32 Bits. Davon ist ein Bit das Vorzeichen und die übrigen Bits geben dann den Wert an.
Mit dem Befehl a << b wird nun der Wert von a genommen und die Bits um b Stellen nach links verschoben.

Also wenn Du 1 << 2 hast, dann ist die 1 ja ein Wert ...0001. Nun werden die Bits um zwei Stellen nach links verschoben. Damit erhältst Du ...0100. 1 << 2 ergibt also wieder eine Zahl und zwar die 4.

Das erklärt dann auch den Hinweis. Wenn Du bei a < b < c aus einem < ein << machst, dann hast Du einen Vergleich von zwei Zahlen. Das funktioniert dann für den Compiler aber hat natürlich nichts mehr mit dem gewünschten Vergleich zu tun.
 

White_Fox

Top Contributor
Also ein a<b und b<c
In Quellcode ausgedrückt:
Java:
boolean foo = a > b && b < c;

Und irgendwo wurde mal der Hinweis geben, Umlaute in Quellcode zu vermeiden.

Noch etwas, daß man nie früh genug lernen kann und auf die kein Tutorial eingeht: Schreib deinen Quellcode so, daß man ihn als Anleitung lesen kann. Dazu gehört, daß man z.B. auch englisch schreibt und auf deutsche Bezeichner verzichtet (es gibt hier zwar für bestimmte Spezialfälle Verfechter, die das anders sehen, aber die tun hier herstmal nichts zur Sache). Es klingt ja auch auf Deutsch unfassbar scheiße, wenn jemand in ein und demselben Satz mehrmals von Deutsch nach Englisch wechselt.

Wenn du Quellcode als menschenlesbaren Fließtext formulierst hast du zu allererst einmal den Vorteil, daß du dir Codekommentare sparen kannst.
  • Weniger Schreibarbeit.
  • Codekommentare müssen bei Änderungen nicht nachgezogen werden, fehlerhafte Kommentare führen dich nicht in die Irre.
Wenn du das Gefühl hast, du hast eine Menge Code geschrieben die durch ihre schiere Größe unübersichtlich wird: Methoden sind nicht nur für mehrfach aufgerufene Codestellen sinnvoll, sondern auch um "Sinnabschnitte" zu bilden. Wenn du im Grunde ein größeres Problem hast daß aber mit mehreren Handgriffen gelöst werden muß – pack es in eine Methode und gib ihr einen griffigen Namen. Du wirst dir damit in Zukunft die Fehlersuche oft stark vereinfachen.

Ich erlaube mir mal, deinen Code entsprechend umzuschreiben:

Java:
package Kapitel_4;

import java.util.Scanner;

public class Schrauben{
    private int scewDiameter;
    private int screwLength;
    private boolean screwIsSmallInDiameter;
    private boolean screwIsMiddleInDiameter;
    private boolean screwIsBigInDiameter;
    private boolean screwIsSmallInLength;
    private boolean screwIsSmaMiddleInLength;
    private boolean screwIsBigInLength;

   public static void main(String[] args){
        getScrewDiameterFromUser();
        categorizeScrew();
        printCategorizationResult();
    }
   
    private void getScrewSizeFromUser(){
        var userInputScanner = new Scanner(System);
        System.out.println("Bitte geben Sie den Durchmesser der Schraube ein.");
        screwDiameter = scan.nextInt();
        System.out.println("Bitte geben Sie die Länge der Schraube ein.");
        screwLength = scan.nextInt();
    }
   
    private void categorizeScrew(){
        screwIsSmallInDiameter = 0 < scewDiameter && screwDiameter < 3;
        screwIsMiddleInDiameter = 4 < scewDiameter && screwDiameter < 6;
        screwIsBigInDiameter = 7 < scewDiameter && screwDiameter < 20;
       
        screwIsSmallInLength = 0 < screwLength && screwLength < 20;
        screwIsSmaMiddleInLength = 21 < screwLength && screwLength < 30;
        screwIsBigInLength = 31 < screwLength && screwLength < 50;
    }
   
    private void printCategorizationResult(){
        if (screwIsSmallInDiameter && screwIsSmallInLength){
            System.out.println("Typ 1");
        }else if (screwIsMiddleInDiameter && screwIsSmaMiddleInLength){
            System.out.println("Typ 2");
        }else if (screwIsBigInDiameter && screwIsBigInLength){
            System.out.println("Typ 3");
        }
        else{
            System.out.println("Unbekannter Schrauebntyp");
        }
    }
}

Ich weiß, man könnte jetzt hergehen und sagen daß das am Anfang ja noch gar nicht so wichtig sei, ich sehe das aber etwas anders. Viele lernen es erst spät, und je später desto schmerzhafter wird die Lektion (weil dann der unbrauchbare Quellcode meist umso größer ist). Und nicht wenige lernen es nie. Dann doch lieber gleich von Anfang an richtig beibringen.

Ach ja...der Übung halber für dich habe ich noch einige Programmierfehler dringelassen, die aber auch schon vorher da waren. Die darfst du jetzt aber selber finden. Tipp: Du wirst sie auf jeden Fall finden, wenn du mal alle Schraubengrößen durchgehst. Und damit meine ich nicht sowas wie Schrauben mit M2,5-Gewinde oder so.
 
ja gut, das ist mir jetzt natürlich etwas peinlich, dass ich auf englisch geschrieben habe, aber ist ja auch egal. Auf jeden fall danke fürs antworten. Aber eine frage hätte ich noch: warum screwDiameter und nicht int diameter?
 
package Kapitel_4;
import java.util.Scanner;
public class Schrauben
{

public static void main(String[] args)
{
//Scanner
Scanner scan = new Scanner(System.in);
System.out.println("Bitte geben Sie den Durchmesser der Schraube ein.");
int diameter = scan.nextInt();
System.out.println("Bitte geben Sie die Länge der Schraube ein.");
int length = scan.nextInt();
scan.close();
//Variablen boolean
boolean diameter1 = (0 < diameter);
boolean diameter11 = (diameter <= 3);
boolean diameter2 = (4 <= diameter);
boolean diameter21 = (diameter <= 6);
boolean diameter3 = (7 < diameter);
boolean diameter31 = (diameter <= 20);

boolean length1 = (0 < length);
boolean length11 = (length <= 20);
boolean length2 = (21 <= length);
boolean length21 = (length <= 30);
boolean length3 = (31 <= length);
boolean length31 = (length <= 50);
//Verzweigung
if (diameter1 && diameter11 && length1 && length11)
{
System.out.println("Typ 1");
}
else if (diameter2 && diameter21 && length1 && length21)
{
System.out.println("Typ 2");
}
else if (diameter3 && diameter31 && length3 && length31)
{
System.out.println("Typ 3");
}
else
{
System.out.println("Unbekannter Schrauebntyp");
}
}

}

ich hab das jetzt so gemacht. geht auch oder? Oder sind da irgendwelchen großen fehler drinne?
 

White_Fox

Top Contributor
ja gut, das ist mir jetzt natürlich etwas peinlich, dass ich auf englisch geschrieben habe, aber ist ja auch egal. Auf jeden fall danke fürs antworten. Aber eine frage hätte ich noch: warum screwDiameter und nicht int diameter?

Ehrlich gesagt: das habe ich aus dem Bauch heraus geschrieben. screwDiameter in Kombination mit screwLength drückt eine Zugehörigkeit der beiden Variablen aus.
Am Ende des Tages ist sowas immer abhängig vom restlichen Code. In deinem kleinen Beispiel würden diameter und length auch genügen. Wenn das Programm nun allerdigns größer ist: Durchmesser/Größe von was?

Stell dir vor du hättest den Code nicht selber geschrieben, müßtest diesen jetzt aber weiterentwickeln. Dann würden screwDiameter und screwLength weniger Fragen offenlassen. Und ich kann dir sagen: Wenn du ein eigenes Projekt ein Jahr lang nicht mehr angefasst hast und nach so langer Zeit mal wieder daran arbeiten willst, ist das eigentlich ganz genauso als hätte jemand anderes den Code geschrieben. Es ist echt keine Freude, vor seinem eigenen Projekt zu sitzen und nicht mehr zu verstehen, was man damals eigentlich gemacht hat.

Das Gemeine an der ganzen Sache ist: Es gibt eigentlich keine (oder kaum) Regeln, wie richtig guter Quellcode aussieht. Es gibt vielmehr jede Menge Merkmale, wie schlechter Code aussieht. Schlechter Quellcode ist der, an dem du nach einem Jahr Pause sitzt und fluchst, guter Code dagegen macht einfach nur keine Probleme.


Zu deiner zweiten Version: Bitte übe das mit den Codetags nochmal. Ansonsten hast du herausgefunden auf was ich dich aufmerksam machen wollte, sehr schön.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M If-Else Java Basics - Anfänger-Themen 5
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
laxla123 Verschachtelte If-Else Schleife Java Basics - Anfänger-Themen 21
laxla123 If-else Java Java Basics - Anfänger-Themen 4
luggas89 If else auch mit unterschiedlichen Antworten Java Basics - Anfänger-Themen 5
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Übung Else if Java Basics - Anfänger-Themen 2
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
L If und else bei 2 Dimensionalen Arrays Java Basics - Anfänger-Themen 8
F if else if anfängerfrage Java Basics - Anfänger-Themen 22
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
T "Einkauf" & if else Struktur Java Basics - Anfänger-Themen 7
steven789hjk543 Input mit if-else Java Basics - Anfänger-Themen 23
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
F Methoden Verschachtelte if else Methode Java Basics - Anfänger-Themen 10
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
C Variablen 'else' without 'if' Java Basics - Anfänger-Themen 4
F If - Else Java Basics - Anfänger-Themen 3
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
I if/else Statements Java Anfänger Java Basics - Anfänger-Themen 14
M jOptionPane mit if else Java Basics - Anfänger-Themen 16
K Frage zu If & else if Java Basics - Anfänger-Themen 5
R else if anweisungen Java Basics - Anfänger-Themen 2
Y Problem mit If-Else Verzweigung! Java Basics - Anfänger-Themen 9
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
Hijo2006 If-else Java Basics - Anfänger-Themen 6
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
T If/ Else If (zurückkehren) Java Basics - Anfänger-Themen 4
O Grosse If / Else verschachtelung übersichlitcher gestlten Java Basics - Anfänger-Themen 6
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
M If in einem else Java Basics - Anfänger-Themen 14
A boolean Methode ohne If und else Java Basics - Anfänger-Themen 1
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
C else in if umschreiben Java Basics - Anfänger-Themen 2
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
E If...else... Java Basics - Anfänger-Themen 7
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
C If Else Frage Java Basics - Anfänger-Themen 2
M if, else Anweisung Java Basics - Anfänger-Themen 3
J Ergebnis wird gespammt sowie eine else if Frage Java Basics - Anfänger-Themen 2
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
O if and else geht nur manchmal Java Basics - Anfänger-Themen 17
V Operatoren Java if-else argument Java Basics - Anfänger-Themen 4
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
P [ANFÄNGER] if else funktioniert nicht Java Basics - Anfänger-Themen 4
T If, else Problem Java Basics - Anfänger-Themen 12
C IF-Else Verknüpfungen Java Basics - Anfänger-Themen 10
Uzi21 if - else Abfrage Java Basics - Anfänger-Themen 6
T Problem im If-Else-Statement Java Basics - Anfänger-Themen 4
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
L else without if Fehler Java Basics - Anfänger-Themen 14
F try/catch - (else) Java Basics - Anfänger-Themen 11
H Worauf bezieht sich die erste else-Anweisung Java Basics - Anfänger-Themen 9
S if und else problem... Java Basics - Anfänger-Themen 13
Q if-else Logikproblem Java Basics - Anfänger-Themen 4
M Probleme mit else if Java Basics - Anfänger-Themen 15
M Erste Schritte Break-Anweisung bei if-else Java Basics - Anfänger-Themen 6
B OOP If und else in Main class einbinden Java Basics - Anfänger-Themen 9
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
K Bedingungen else Java Basics - Anfänger-Themen 7
B if-else in einer schleife Java Basics - Anfänger-Themen 14
J Erste Schritte If-Else Idee gesucht Java Basics - Anfänger-Themen 6
T if else Java Basics - Anfänger-Themen 8
R boolean, if-else Java Basics - Anfänger-Themen 7
M if then else geht nicht Java Basics - Anfänger-Themen 10
P int-Wertevergleich mit if-else-Verzweigung Java Basics - Anfänger-Themen 3
P If-else-Verzweigung Java Basics - Anfänger-Themen 9
E Compiler-Fehler Fehler: else without if Java Basics - Anfänger-Themen 11
D Java Einsteiger (boolean, if-else etc.) Java Basics - Anfänger-Themen 7
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
K Mal wieder ein Problem mit If / Else Java Basics - Anfänger-Themen 10
K Anfänger If / Else Problem Java Basics - Anfänger-Themen 5
C if else Abfrage Java Basics - Anfänger-Themen 11
T Umschreiben von switch in if else und umgekehrt Java Basics - Anfänger-Themen 9
C Schleifen, if, else......? Java Basics - Anfänger-Themen 8
2 if und else Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
S Brauche Hilfe bei if/else Java Basics - Anfänger-Themen 3
S if-else Java Basics - Anfänger-Themen 22
A ein if else problem Java Basics - Anfänger-Themen 13
N If-else-If Leiter Java Basics - Anfänger-Themen 9
U Dringend: Syntax error on token "else" Java Basics - Anfänger-Themen 8
L if else anweisung Java Basics - Anfänger-Themen 2
M If/Else mit Zahlenfolge Java Basics - Anfänger-Themen 13
B Problem mit Variable und if/else Java Basics - Anfänger-Themen 6
H alternativen zu if .. else .. Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben