Frage von snipesss, 77

Wieso ist der Code falsch?

import java.io.File;
import static java.lang.System.out;
import java.util.Scanner;

public class DeleteEvidence {
public static void maint(String [] args) {
    
    File Evidence = new File("Test.txt");
    Scanner keyboard = new Scanner(System.in);
    char reply;
    
    do{
        out.println("Den Beweis löschen? (j/n)");
        reply = 
                keyboard.findWithinHorizon(".", 0).charAt(0);
    } while (reply != "j" && reply != "n");
    
    if (reply == "j") {
        out.println("Okay, die Datei wird gelöscht.");
        Evidence.delete();
        out.println("Die Datei ist gelöscht worden.");
    }else{
        out.println("Die Datei wird nicht gelöscht.");
    }
    
    keyboard.close();
    
    }
}

In meiner IDE wird die IF-Zeile und die WHILE-Zeile unterstrichen.

Wieso?

Antwort
von ceevee, 26

Deine IDE unterstreicht nicht nur, deine IDE sagt dir auch, was sie konkret stört. Spätestens, wenn du versuchst, das Programm zu kompilieren, vielleicht auch schon, wenn du mit der Maus über die Unterstreichung gehst. Ich hab dein Programm mal in einem Online-Javacompiler getestet und drei mal folgende Meldung bekommen:

error: incomparable types: char and String

in der if-Anweisung und in der while-Schleife. Damit sollte zumindest klar sein, was das Problem ist. Wenn du das behebst, dann kommt anschließend:

Main method not found in class DeleteEvidence, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application

Es ist wichtig, dass deine IDE so eingerichtet ist, dass sie diese Fehlermeldungen anzeigt und dass du auch weißt, wo du diese Fehlermeldungen findest.

Antwort
von LeonardM, 55

Variable reply ist vom typ char. Char wird mit ' behandelt und nicht mit "

Zumindest bei cpp,c,c#...

Kommentar von SirNik ,

in java genauso ;)

Antwort
von Stevie85, 42

Das Semikolon hinter dem While muss weg. Das wird auch so wohl nicht so gut funktionieren. Sofern dein "Reply" was anderes als "j" oder "n" ist, würdest Du mit der Whileschleife in einen Deadlock laufen.

Kommentar von SirNik ,

es handelt sich um eine do-while, da muss ein ; hinter das while

Kommentar von Stevie85 ,

Jup, habe das Do nicht gesehen.

Antwort
von LeCux, 35

1. es sollte wohl public static void main(String[] args) heissen

2. reply ein char, kein String, damit würde das == unterschiedliche Typen vergleichen, daher '' anstelle von ""

3. Strings sollte man NICHT mit == vergleichen sondern mit equals.

Kommentar von KnusperPudding ,

4. Static Imports können vor allem bei Anfängern massiven Problemen führen: 

import static System.out;

da man ja doch gerne mal eine eigene Outputstream Variable: out nennt und man sich dann frägt was das Problem liegt.

Kommentar von snipesss ,

Zu blöd dass das keine Strings sind sondern Char - Werte.

Kommentar von LeCux ,

Der Punkt 3 war vorraussehend als Hinweis gedacht - Strings auf Gleichheit prüfen ist nahezu immer falsch.

Sonst siehe Punkt 2: reply ist char, "j" ist aber ein String.

Keine passende Antwort gefunden?

Fragen Sie die Community