2016-04-02 8 views
0

Ich übe Java und ich bin auf ein kleines merkwürdiges Problem gestoßen oder sollte ich Probleme sagen.Java gibt keine Zeichenkette vom Scanner-Eingang zurück

Wenn ich den folgenden Code zu kompilieren sagt es java line #: Fehler:

missing return statement.

Wenn ich den Kommentar zu entfernen, wo ich return "not valid" haben, kompiliert.

Nun ist dies, wo die andere Frage kommt. Wenn ich die init_config und final_config String übergeben, die ich als Eingang A und B, den nicht gültig zurückgibt. Aber wenn ich "A" und "B" auf andere Funktion übergeben (other("A", "B") die spezifische Rendite, die "C" ist zurückgegeben/gedruckt.

Ich bin nicht sicher, ob das das Problem liegt bei meiner Eingabemethode. Die Daten-I-Eingang für meine init_config und final_config sollte String-Werte sein, richtig? Ich bin mir nicht sicher, ob Scanner eine gute String-Eingabemethode ist. Wenn ich jedoch die beiden Eingaben drucke, funktioniert es gut, also bin ich mir nicht sicher, ob es Datenverlust ist oder die String-Referenz verloren ist es wird übergeben.

ich habe auch versucht init_config = in.next() mit init_config = in.nextLine() ersetzen, aber es hat keinen Unterschied machen.

Ist es notwendig, den Code mit dem return "not valid" am Ende der Funktion zu kompilieren oder kann ich dies mit einer Methode umgehen? Und wie kann ich String-Daten mit Scanner Eingabemethode ohne Verlust übergeben?

Hier ist mein Code:

import java.util.Scanner; 
public class towerGen 
{ 
    public static void main(String[]args) 
    { 
     Scanner in = new Scanner(System.in); 
     String init_config, final_config; 

     System.out.print("Enter initial configuration: "); 
     init_config = in.next(); 

     System.out.print("Enter final configuration: "); 
     final_config = in.next(); 

     System.out.print(other(init_config, final_config)); 

    } 

    public static String other(String src, String dest) 
    { 
     if (src=="A" && dest=="B") 
      return "C"; 
     if (src=="B" && dest=="A") 
      return "C"; 
     if (src=="B" && dest=="C") 
      return "A"; 
     if (src=="C" && dest=="B") 
      return "A"; 
     if (src=="A" && dest=="C") 
      return "B"; 
     if (src=="C" && dest=="A") 
      return "B"; 
    //return "not valid"; 
    } 
} 
+2

Testen Sie niemals Zeichenfolgen mit '==' immer '' equals' 'Methode verwenden. –

+0

Danke. @ Jean-BaptisteYunès – mickey4691

Antwort

1

Is it necessary to compile the code with the return "not valid" at the end of the function?

Ja, es ist. Da der Compiler erkennt, dass, wenn die Eingabezeichenfolgen keine der aufgeführten Bedingungen erfüllen, gibt es nichts zurückzugeben, was ein Fehler in einer nicht-void-Methode ist.

Auch in Ihrer other Methode sollten Sie src.equals("A") und nicht src == "A" verwenden, wenn Sie Strings vergleichen.

+0

Das ist gut. Ich wusste nichts über die E-Mails(), die ich den ganzen Tag suchte, aber vielleicht waren meine Bedingungen falsch. Vielen Dank. – mickey4691

0

Ich glaube, Sie so ziemlich die Antwort aus der obigen Diskussion also bekam,

Use equals method instead of ==. Because == checks if the both the object references are referring to the same object and not the contents inside it.

antworten würde gerne, warum es funktioniert, wenn Sie die Funktion anderer ("A", "B") genannt, da es ins Bild bringt das Konzept der String-Pool, was bemerkenswert ist.

But when I pass "A" and "B" to other function (other("A", "B") the specific return which is "C" is returned/printed.

Wenn wir ein String-Objekt ohnenew Operator (aka Stringliteral) erstellen, verwendet es den String-Pool, das Objekt zu erhalten. Wenn es nicht vorhanden ist, wird es erstellt und in den String-Pool eingefügt. Der Zeichenfolgenpool ist freigegeben. Und wenn wir den Operator new verwenden, wird immer ein neues String-Objekt erstellt und das eine im Pool nicht referenziert, auch wenn es ein solches gibt.

Wenn Sie other("A", "B") aufgerufen haben, verweisen die Argumente hier auf die Zeichenfolgenobjekte im Zeichenfolgenpool. Und anschließend in der other(..)-Methode, wenn Sie eine Überprüfung wie src=="A" durchgeführt haben, wird True zurückgegeben, da sich src und "A" auf dasselbe Zeichenfolgenobjekt im Pool beziehen.

Um dies zu testen, können Sie versuchen, mit System.out.print(other(new String("A"), "B")); und dies würde wieder nicht gültig.

Weitere Informationen finden Sie unter java string with new operator and a literal.

+0

Das ist sehr gut. Vielen Dank. – mickey4691

Verwandte Themen