2016-03-26 19 views
0

Ich schreibe ein kleines Programm, um festzustellen, ob ein Array von Strings die gleichen vorwärts und rückwärts liest. Gerade jetzt sollte mein Programm falsch zurückgeben. Ich habe ein bisschen Schwierigkeiten, denn wenn ich das Array scanne, möchte ich, dass der zweite Forloop denselben Index scannt, in dem die erste for-Schleife läuft, aber ich bekomme einen nicht aufgelösten Variablenfehler. Ich weiß, dass es eine einfachere Lösung gibt, aber ich möchte nur eine Lösung für diesen speziellen Fehler finden.Ungelöste Variable Fehler

public class Pal { 
public static void main(String[] args) { 
    String[] pal = { 
    "alpha", 
    "beta", 
    "gamma", 
    "delta", 
    "gamma", 
    "beta", 
    "alpha", 
    "donw" 
    }; 
    System.out.println(palindrome(pal)); 
} 

public static boolean palindrome(String[] pal) { 
    String[] container = new String[pal.length]; 
    String[] rcontainer = new String[pal.length]; 
    for (int i = 0; i <= pal.length - 1; i++) { 
    container[i] = pal[i]; 
    } 
    for (int k = pal.length - 1; k >= 0; k--) { 
    rcontainer[k] = pal[i]; 
    } 
    for (int a = 0; a < pal.length; a++) { 
    if (rcontainer[a].equals(container[a])) { 
    return true; 
    } 
    } 

    return false; 
} 

} 
+0

Woher bekommen Sie den Fehler? Edit: Ich sehe, schauen Sie sich die Zeile rcontainer [k] = pal [i]; Benutzt du da irgendwelche falschen Variablen? – mkabanen

+0

Gibt es eine Problemumgehung für diesen Fehler? –

Antwort

1

i in rcontainer[k]=pal[i]; ist nicht definiert.

Ändern der Zeile zu rcontainer[k]=pal[k]; wird den Fehler entfernen, aber die Logik zu beurteilen, ob der Eingang Palindrome ist auch falsch. Sie müssen

  • umge eines des Array statt zwei Kopien von Arrays mit dem gleichen Inhalt zu schaffen.
  • Überprüfen Sie, ob alle Elemente in der ursprünglichen und umgekehrten Array ist gleich, nicht einer der sie ist.

verbesserter Code:

public class Pal { 
    public static void main (String[]args) { 
     String[] pal= {"alpha", "beta", "gamma", "delta", "gamma", "beta","alpha","donw"}; 
     System.out.println(palindrome(pal)); 
    } 

    public static boolean palindrome(String[]pal) { 
     String[]container=new String[pal.length]; 
     String[]rcontainer=new String[pal.length]; 
     for (int i=0;i<=pal.length-1;i++) { 
      container[i]=pal[i]; 
     } 
     for (int k=pal.length-1;k>=0;k--) { 
      rcontainer[k]=pal[pal.length-1-k]; 
     } 
     for (int a=0;a<pal.length;a++) { 
      if(!rcontainer[a].equals(container[a])) { 
       return false; 
      } 
     } 

     return true; 
    } 

} 

Beachten Sie, dass die ursprüngliche Anordnung der Original-Array ist, so dass Sie nicht das ursprüngliche Array kopieren müssen und können nur pal statt container verwenden.

+0

Nun, wenn ich es zu ändern, wird das Programm ausgeführt, aber es gibt das richtige Ergebnis –

+0

Awesome Dank bro –

0

Sie haben ein Problem mit der lokalen Variable 'i', da es nicht im Bereich war, der Compiler wird einen Fehler ausgeben und der Code wird nicht kompilieren! Außerdem müssen Sie Ihren Algorithmus überprüfen. Basierend auf dem, was Sie tun möchten, glaube ich, dass ich eine einfache Lösung gefunden habe, die Sie vielleicht sehen wollen. Ich hoffe, es wird hilfreich sein.

package palindrome; 

public class Pal { 
    public static void main(String[] args) { 
     String[] pal1 = {"alpha", "beta", "gamma", "delta", "gamma", "beta", "alpha", "donw"}; 
     String[] pal2 = {"aaa", "aka", "eve", "otto", "abcdefgfedcba"}; 
     System.out.println(palindrome(pal1)); // false 
     System.out.println(palindrome(pal2)); // true 
    } 

    public static boolean isPalindrome(String word) { 
     StringBuffer sb = new StringBuffer(); 
     int len = word.length(); 

     while (--len >= 0) { 
      sb.append(word.charAt(len)); 
     } 

     String reverse = sb.toString(); 

     if (word.equals(reverse)) { 
      return true; 
     } 

     return false; 
    } 

    public static boolean palindrome(String[] pal) { 
     int len = pal.length; 

     for (int i = 0; i < len; i++) { 
      String word = pal[i]; 
      if (isPalindrome(word) != true) { 
       return false; 
      } 
     } 

     return true; 
    } 
} 
+1

Dank Bruder Ich habe es mir angesehen und es hat sehr geholfen –

Verwandte Themen