Dead Code im Programm?

überlebender

Aktives Mitglied
Hi, ich muss ein Programm schreiben, dass die Wahrheitswerte von Variablen in Abhängigkeit von dem Wahrheitswert anderer Variablen ausgibt. Nun habe ich den Code geschrieben, er funktioniert auch aber in einer Zeile steht "Dead Code"? Ich verstehe nun nicht warum.

Aufgabenstellung:
• Deklarieren Sie im DB die statischen boolean-Variablen x,y sowie a,b,c und die statische int-Variable input. Allen Variablen weisen Sie beliebige Werte zu. Sie dürfen bei input davon ausgehen, dass nur einer der folgenden Werte eingegeben wird: 0,1,10 oder 11.

Wir definieren folgende Eigenschaften:
– E1: x ist wahr (hat also den Wert true).
– E2: y ist wahr.
– E3: die Werte von x und y sind unterschiedlich.

• Im AB weisen Sie x nur dann den Wert true zu, falls input den Wert 10 oder 11 hat. In den beiden anderen Fällen erhält x also den Wert false. Weisen Sie y nur dann den Wert true zu, falls input den Wert 11 oder 1 hat;
In den anderen beiden Fällen wird y der Wert false zugewiesen. Weiterhin erhält a nur dann den Wert true, falls E1 und E2 (gleichzeitig) erfüllt sind. Die Variable b erhält nur dann den Wert true, falls mindestens eine der Eigenschaften E1 und E3 erfüllt sind. Die Variable c verhält sich entsprechend der folgenden Wahrheitstabelle:
Screenshot 2023-11-17 115938.jpg

Java:
package a2;

public class A2_main {

    /*
     * Start des Deklarationsbereichs. Achten Sie unbedingt darauf, dass vor jeder
     * Variablendeklaration das Schluesselwort static steht.
     */

    static boolean x = true;
    static boolean y = false;
    static boolean a = true;
    static boolean b = false;
    static boolean c = true;
    static int input = 10;
    
    
    /*
     * Ende des Deklarationsbereichs.
     */
    public static void main(String[] args) {
        /*
         * Start des algorithmischen Bereichs.
         */

        if (input == 10 || input == 11) {
            x = true;
        }else x = false;
        
        
        if (input == 11 || input == 1) {
            y = true;
        }else  y = false;
    
    
    //Variable a
        
    if (x == true && y == true) {
        a = true;
    }else a = false;
        
    //Variable b
    
    if (x = true || (x ^ y)) {      [I][B]// (x ^ y) dead code????? - Ich sollte hier angeben, dass x und y verschieden sind[/B][/I]
        b = true;
    }else b = false;
    
    //Variable c
    
    if (x == true && y == true) {
        c = false;
    
    }else if (x == true && y == false) {
        c = true;
    
    }else if (x == false && y == true) {
        c = false;
        
    }else if (x == false && y == false) {
        c = true;
    
    
    }
        

        
        
        
        /*
         * Hier endet der algorithmische Bereich. Dieser Kommentar und damit alles, was
         * darunter steht, darf verschoben werden (wenn Sie zum Beispiel mehr Zeilen
         * brauchen).
         *
         * Alles, was hinter diesem Kommentar steht, darf nicht veraendert werden!
         *
         */
        
        System.out.println("Wert von x: " + x);
        System.out.println("Wert von y: " + y);
        System.out.println("Wert von a: " + a);
        System.out.println("Wert von b: " + b);
        System.out.println("Wert von c: " + c);

    }

}
 

KonradN

Super-Moderator
Mitarbeiter
Du hast da eine Zuweisung und keinen Vergleich:
if (x = true
Dadurch hast du da immer ein true wert und damit wird er nie in den else Zweig kommen können.
 

überlebender

Aktives Mitglied
Du hast da eine Zuweisung und keinen Vergleich:
if (x = true
Dadurch hast du da immer ein true wert und damit wird er nie in den else Zweig kommen können.
Gibt es eine Möglichkeit, solche kleinen Flüchtigkeitsfehler auch automatisch von der IDE beheben zu lassen oder muss man immer selbst drüber schauen?

Was wäre da das Stichwort ?- um sich selbst mal zu informieren
 

KonradN

Super-Moderator
Mitarbeiter
Ich bin mir nicht sicher - evtl. wird da schon von der einen oder anderen Entwicklungsumgebung gewarnt.
Auch Tools wie SonarLint könnten interessant sein und da ggf. eine Warnung aussprechen. Das müsste man ggf. testen.
Und dann gibt es noch PMD und SpotBugs und so als statische Codeanalyse Tools.


Generell ist Code so nicht schön. Generell sollte man sich überlegen, was Du da genau hast.

a) Die Variablen brauchst Du nur in der Methode? Warum sind es dann keine lokalen Variablen?
b) Du weist einigen Variablen immer einen Wert zu - wozu eine Initialisierung bei der Deklaration?
c) Die Variable wird nur ein mal gesetzt. Das ist die ganze Intention dahinter. Daher kann man die Variable final machen.

Also nur mal für die Variable x, wie das dann aussehen könnte:
Java:
    public static void main(String[] args) {
        final boolean x = input == 10 || input == 11;

Wenn Du jetzt so einen Fehler machst, dann bekommst Du vom Compiler eine Fehlermeldung. x ist final und du kannst da nichts mehr zuweisen.

Und das sind dann übrigens die Meldungen, die man meistens hat. "Variable xyz kann final sein" oder so ähnlich wird dann gemeckert.

Damit sind wir dann aber bei dem Thema Clean Code angekommen. Es gibt gewisse Best Practices. Und es gibt Tools, die dies unterstützen. Aber oft kann ein Tool nur dann unterstützen, wenn man schon gewisse Dinge gemacht hat. Und einer von ganz vielen Punkten ist dann das final.

Wenn Du lokale Variablen hast, die Du nur einmal setzt: final!
Parameter: final (Das sind halt nur Werte, die in die Methode rein gehen. Da wird nichts mehr geändert!)
...

Das wäre so meine Sichtweise. Was am Anfang schon sehr helfen kann: SonarLint Plugin (Ich nutze es selbst erst seit kurzem in IntelliJ). Das ist ein ganz einfacher und schneller Einstieg ...
 

überlebender

Aktives Mitglied
Ich bin mir nicht sicher - evtl. wird da schon von der einen oder anderen Entwicklungsumgebung gewarnt.
Auch Tools wie SonarLint könnten interessant sein und da ggf. eine Warnung aussprechen. Das müsste man ggf. testen.
Und dann gibt es noch PMD und SpotBugs und so als statische Codeanalyse Tools.


Generell ist Code so nicht schön. Generell sollte man sich überlegen, was Du da genau hast.

a) Die Variablen brauchst Du nur in der Methode? Warum sind es dann keine lokalen Variablen?
b) Du weist einigen Variablen immer einen Wert zu - wozu eine Initialisierung bei der Deklaration?
c) Die Variable wird nur ein mal gesetzt. Das ist die ganze Intention dahinter. Daher kann man die Variable final machen.

Also nur mal für die Variable x, wie das dann aussehen könnte:
Java:
    public static void main(String[] args) {
        final boolean x = input == 10 || input == 11;

Wenn Du jetzt so einen Fehler machst, dann bekommst Du vom Compiler eine Fehlermeldung. x ist final und du kannst da nichts mehr zuweisen.

Und das sind dann übrigens die Meldungen, die man meistens hat. "Variable xyz kann final sein" oder so ähnlich wird dann gemeckert.

Damit sind wir dann aber bei dem Thema Clean Code angekommen. Es gibt gewisse Best Practices. Und es gibt Tools, die dies unterstützen. Aber oft kann ein Tool nur dann unterstützen, wenn man schon gewisse Dinge gemacht hat. Und einer von ganz vielen Punkten ist dann das final.

Wenn Du lokale Variablen hast, die Du nur einmal setzt: final!
Parameter: final (Das sind halt nur Werte, die in die Methode rein gehen. Da wird nichts mehr geändert!)
...

Das wäre so meine Sichtweise. Was am Anfang schon sehr helfen kann: SonarLint Plugin (Ich nutze es selbst erst seit kurzem in IntelliJ). Das ist ein ganz einfacher und schneller Einstieg ...
Das mit der Variablendeklaration ist wohl so eine Eigenart des Programmierkurses in dem ich bin. Meine Aufgaben werden von einem automatisierten Testsystem geprüft und dafür muss man die Variablen wohl in DB deklarieren.

Danke für die Tipps, werde ich mir mal anschauen.
 

Oneixee5

Top Contributor
Gibt es eine Möglichkeit, solche kleinen Flüchtigkeitsfehler auch automatisch von der IDE beheben zu lassen oder muss man immer selbst drüber schauen?
genaugenommen ist so ein Statement gar nicht notwendig:
Java:
if (x = true || (x ^ y)) {
    ...
}
Ob jetzt mit = oder == geschrieben sei mal egal. x ist eine boolsche Variable if wertet die ja schon aus. Du wertest das aus und stellst wieder nur das Ergebnis ein, welches durch if ausgewertet wird.
Also schreib einfach:
Java:
if (x || (x ^ y)) {
    ...
}
oder:
Java:
if (x) {
    ...
}
So schreiben das nur Anfänger die noch nicht wirklich wissen was sie tun:
Code:
if (x == true) {
    ...
}
Der Compiler optimiert das sowieso weg. Also zumindest hier sollte die Zuweisung überhaupt nicht passieren.
 

Barista

Top Contributor
Java:
if (x = true || (x ^ y)) {
...
}
Ob jetzt mit = oder == geschrieben sei mal egal.
Das ist nicht egal, bei Verwendung des einfachen Gleichheitszeichens (Zuweisung) wird erst die Zuweisung ausgeführt und dann das Ergebnis, in diesem Fall true, verwendet. Also immer true, weil bei ODER bereits ein true ausreicht für das Ergebnis true.

Wenn eigentlich ein doppeltes Gleichheitszeichen (Vergleich) gemeint war, dann kann man den Term zu

Java:
x || y

umformen, weil bei x == false der rechte Teil ausgewertet wird. Dieser liefert true, wenn y true ist.
 

Barista

Top Contributor
Wir definieren folgende Eigenschaften:
– E1: x ist wahr (hat also den Wert true).
– E2: y ist wahr.
– E3: die Werte von x und y sind unterschiedlich.
Hierfür würde ich 3 Methoden schreiben:
Java:
private static boolean eigenschaft1(boolean x) {
    return x;
}

private static boolean eigenschaft2(boolean y) {
    return y;
}

private static boolean eigenschaft3(boolean x, boolean y) {
    return x != y;
}
Diese würde ich dann im Code verwenden. Selbstdokumentierend!
 

KonradN

Super-Moderator
Mitarbeiter
Nebenbei angemerkt, die Tabelle (!x und !y oder x und !y) ist einfach nur !y: https://math.stackexchange.com/ques...and-not-b-simplification-using-de-morgans-law (das außenstehende ! bitte wegdenken ;) )

@überlebender In welcher Klasse bist du?
Nur eben geht es um x und y sind unterschiedlich. also x xor y oder eben (!x und y) oder (x und !y)

variable == wert zu schreiben, ist strenggenommen falsch,
Diese Aussage ist aus meiner Sicht schlicht übertrieben. Das Umdrehen ist auch bekannt als "Yoda condition": Yoda conditions - Wikipedia
Und wie man dem Wikipedia Beitrag entnehmen kann, gibt es da sehr wohl auch Gegenargumente - bei java in erster Linie, dass es eben der natürlichen Sprache entgegen steht und damit das Lesen vom Code schlicht erschwert.

Bei so umstrittenen Punkten würde ich daher eher nicht von "strenggenommen falsch" reden.
 

KonradN

Super-Moderator
Mitarbeiter
Ich würde da nicht so viel Wert auf Wikipedia legen, wo kann jeder schreiben kann, und Stack Overflow etwas mehr Kompetenz zusprechen...
Auf SO kann auch jeder schreiben …
Und in dem verlinkten SO Beitrag finden sich u.a. auch ein Link zu dem Wikipedia Artikel und eben auch einige relativierende Aussagen.

Daher kann ich deiner Aussage gerade nicht folgen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Voreck Dead Code Java Basics - Anfänger-Themen 6
B Warnung : Dead Code. Aber wieso? Java Basics - Anfänger-Themen 10
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
S Bewertet meinen Code - Part 1 Java Basics - Anfänger-Themen 8
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben