2017-09-15 1 views
0

Ich versuche grundsätzlich zu berichten, ob string1 und string2 genau die gleichen Tokens in der gleichen Reihenfolge enthalten. Ich kann nicht herausfinden, was mit meinem Code falsch ist. Ich habe die Endlosschleife korrigiert, aber jetzt prüft sie keine leere Zeichenkette.Wie liest man aus der Eingabe und meldet, ob zwei Strings exakt die gleichen 'Token' an genau denselben Positionen haben?

public static boolean sameTokens (String s1, String s2) 
{ 
    Scanner scan1 = new Scanner(s1); 
    Scanner scan2 = new Scanner(s2); 

    boolean contains = true; 

    String token1 = scan1.next(); 
    String token2 = scan2.next(); 




     while (token1.length() <= token2.length()) 
     { 
      if (!(scan1.hasNext() || scan2.hasNext())) 
      { 
       contains = false; 
      } 
      if (token1.equals(token2)) 
      { 
       contains = true; 
      } 

    } 

    return contains; 

} 

Dies sind meine Testfälle.

@Test 
public void testSameTokens() 
{ 
    assertTrue(sameTokens("this is a test", " this is a test ")); 
    assertTrue(sameTokens("", "")); 
    assertFalse(sameTokens("hello there", "hello there Joe")); 
    assertFalse(sameTokens("abc def", "def abc")); 
    assertFalse(sameTokens("a", "A")); 
    assertFalse(sameTokens("a b c", "abc")); 
} 

Und das ist das Ergebnis.

Result of Test case 1

Image of error

Vielen Dank im Voraus Jungs.

+1

Wie können Sie die Endlosschleife korrigiert haben, wenn Sie tatsächlich keine der in der Schleifenbedingung innerhalb der Schleife verwendeten Werte ändern? – Andreas

+0

Irgendwelche Anhaltspunkte, an was ich es ändern sollte? – SassyRegards201

+0

Sie beginnen mit der Bearbeitung der Frage und zeigen den tatsächlichen Code, den Sie haben. Du weißt, der Code, wo du angeblich die Endlosschleife reparierst. Ich verstehe nicht einmal den Zweck der Schleife, * wie gerade gezeigt *, da du 'contains = false;' direkt vor der Schleife gesetzt hast, und der einzige Effekt der Schleife ist, es wieder zu tun, also warum gerade habe die Schleife? – Andreas

Antwort

1

Ich habe Ihren Code geändert und gibt die erwarteten wahren Werte aus.

public static boolean sameTokens(String s1, String s2) { 

    Scanner scan1 = new Scanner(s1); 
    Scanner scan2 = new Scanner(s2); 

    while(scan1.hasNext()||scan2.hasNext()){ 
     if ((!scan1.hasNext() && scan2.hasNext()) || (!scan2.hasNext() && scan1.hasNext())) { 
      return false; 
     } else { 
      String token1 = scan1.next(); 
      String token2 = scan2.next(); 

      if (!token1.equals(token2)) { 
       return false; 
      } 
     } 
    } 

    return true; 
} 

Hoffe, dass hilft.

+0

Danke, ich verstehe, was ich falsch gemacht habe. Ich habe nicht berücksichtigt, was passieren würde, wenn die Saiten nicht übereinstimmen würden. Hallo Welt und Hallo Welt zum Beispiel Joe. – SassyRegards201

+0

Das Veröffentlichen von gebrauchsfertigem Code ohne jede Erklärung, besonders wenn es sich um Hausaufgaben handelt, ist keine gute Antwort. Für die Hausaufgaben sollte die Antwort einige Hinweise, vielleicht Pseudo-Code und viel mehr Erklärung enthalten. – Turing85

Verwandte Themen