2016-03-25 12 views
1

Ich werde immer als false ausgegeben.Mein Code druckt nur falsch. Was kann falsch sein?

Mein Ziel ist es, true zu drucken, wenn String t in der gleichen Reihenfolge in String s vorhanden ist.

Zum Beispiel:

  1. String s = "gagbgcgd"; 
    String t = "abcd"; 
    

    Erwartete Ausgabe:

    wahr

  2. String s = "gagcgdgb"; 
    String t = "abcd"; 
    

    Erwartete Ausgabe:

    falsch

Hier ist der Code.

public class StringCompare { 
    public static boolean stringCompare(String t,String s) { 
     if (t.length() == 0) { 
      return true; 
     } 
     if (s.length() == 0) { 
      return false; 
     } 
     if (t.charAt(0) == s.charAt(0)) { 
      stringCompare(t.substring(1), s.substring(1)); 
     } 
     else { 
      stringCompare(t, s.substring(1)); 
     } 
     return false; 
    } 

    public static void main(String[] args) { 
     String s = "acaoadaianaga"; 
     String t = "coding"; 
     System.out.println(stringCompare(t,s)); 
    } 
} 

Antwort

11

Wenn Sie recurse, geben Sie das Ergebnis der Rekursion nicht zurück. Ändern

if(t.charAt(0)==s.charAt(0)){ 
    stringCompare(t.substring(1), s.substring(1)); 
} 
else{ 
    stringCompare(t, s.substring(1)); 
} 

um so etwas wie

if(t.charAt(0)==s.charAt(0)){ 
    return stringCompare(t.substring(1), s.substring(1)); 
} 
else{ 
    return stringCompare(t, s.substring(1)); 
} 
+0

Vielen Dank. Einige meiner anderen Aufgaben hatten das gleiche Problem. Aber sie sind jetzt gelöst. – iVvaibhav

+1

@iVvaibhav Wenn Ihr Problem gelöst ist, vergessen Sie nicht, [Antwort akzeptieren] (http://meta.stackexchange.com/q/5234/243725). –

+1

@iVvaibhav Als Anmerkung (da es so aussieht, als ob Sie zwischen den akzeptierten Antworten wechseln): Sie können nur eine Antwort akzeptieren. Sie müssen sich entscheiden, welches. – Tom

0

Dies liegt daran, die äußere rekursiv ruft Sie immer falsch außer if(t.length()==0){return true;}

Blick auf Elliott Frischs Antwort zurückgibt.

-2

Sie sollten .contains verwenden. Beispiel:

boolean istrue = t.contains(s); 
+3

Haben Sie versucht, die Frage zu verstehen? – Tom

+1

Was ich meine ist: OP prüft nicht, ob "t" in "s" ist, wie "t" momentan ist. OP was zu prüfen ist, ob das Zeichen in 't' in' s' ist. '# contains' kann das mit' t.contains (s) 'nicht überprüfen. Du könntest also darüber nachdenken, deine falsche Antwort zu entfernen, oder du kannst sie verbessern :). – Tom

2

Das Hauptproblem des Codes ist in der ersten Ausführung der Rekursion immer false zurück, egal was der Rückgabewert in den Rekursion Ausführung verbleibt.

Sie sollten Ihren Code so etwas wie ändern:

if(t.charAt(0)==s.charAt(0)){ 
    return stringCompare(t.substring(1), s.substring(1)); 
} 
else{ 
    return stringCompare(t,s.substring(1)); 
} 

und entfernen Sie die letzte return false; Aussage.

+0

Danke, es hat funktioniert – iVvaibhav