Chars eines Strings mit for schleife rückwärts auslesen

caedezz

Mitglied
Nabend,

folgendes Problem:
ich soll eine Methode schreiben in der ich feststellen soll ob ein vom Benutzer eingegebenes Wort ein Palindrom ist (also rückwärts gelesen das Selbe wie vorwärts)

So weit so gut, leider klappt das rückwärts auslesen irgendwie nicht wie ich das gerne hätte.

Java:
	public static void testIfPal{
	String input;
	
	input = s.nextLine();
	int length = input.length();
	char[] forward = new char[length];
    char[] backward = new char[length];
	
	for (int i = 0; i<input.length(); i++) {
		forward[i] = input.charAt(i);
	}
	for (int i = input.length()-1; i>-1; i--) {
		backward[i] = input.charAt(i);
	}
	
	String str = new String(forward);
	String str2 = new String (backward);
	System.out.println(str);
	System.out.println(str2);

	}
	
}

Bei der Eingabe abc bekomme ich zB. bei dem backward string auch abc als Ausgabe.
Generell bekomme ich immer das Wort vorwärts ausgegeben obwohl ich doch rückwärts zähle?
Das versteh ich nicht. 😱
 
Zuletzt bearbeitet:
Nja du gehst zwar Rückwärts durch deinen input String, aber du trägst die Werte auch von hinten nach vorne in dein Array ein. Da musst du schon dafür sorgen, dass der hinterste Buchstabe an der ersten Stelle steht (usw.)
 
tatsache,

also so in der Art:

Java:
	public static void testIfPal{
String input;
 
input = s.nextLine();
int length = input.length();
char[] forward = new char[length];
char[] backward = new char[length];


 for (int i = 0; i < input.length(); i++) {
			forward[i] = input.charAt(i);
		}
		for (int i = forward.length - 1; i > -1; i--) {
			for (int j = forward.length - 1; j <= forward.length - 1; j++) {
				 
				backward[j] = forward[i];
			}
		}
 
String str = new String(forward);
String str2 = new String (backward);
System.out.println(str);
System.out.println(str2);
 
}
 
}

muss aber wohl auch noch irgendwie nen fehler bei den Bereichen drin sein, bekomme jetzt zB bei Eingabe: abc die Ausgabe:
abc (vorwärts)
--a (rückwärts) (die - stehen für 2 Leerzeichen, wird hier nicht richtig angezeigt)
 
Zuletzt bearbeitet:
Lass die for-j-Schleife weg, und denk' drüber nach, wie du aus dem i der for-i-Schleife den richtigen Index für backward errechnen kannst.
 
Ich würde das so programmieren:
Java:
class Main
{
   private static boolean isPalindrom(String txt) throws Exception
   {
      int last = txt.length() - 1;
      if(last < 0)
      {
         throw new Exception("txt");
      }
      
      txt = txt.toLowerCase();
      int count = (int)Math.ceil((double)last / 2);
      for(int i = 0; i < count; ++i)
      {
         if(txt.charAt(i) != txt.charAt(last - i))
         {
            return false;
         }
      }
      return true;
   }
   public static void main(String[] args) 
   {    
      try
      {
         System.out.println(isPalindrom("a"));
         System.out.println(isPalindrom("aa"));
         System.out.println(isPalindrom("aba"));
         System.out.println(isPalindrom("Reliefpfeiler"));
         System.out.println(isPalindrom("ab"));
         System.out.println(isPalindrom("abc"));
         System.out.println(isPalindrom(""));
      }
      catch(Exception e)
      {
         System.out.println("Fehler");
      }
   }
}
 
Passt, danke euch für die Mühen (auch minzee 🙂 ),
habs mittlerweile geschafft es mit ner while schleife statt den 2 for schleifen zu lösen.
In etwa so:
Java:
                int i = length;
		int j = 0;
		while (i > 0) {

			backwards[j] = input.charAt(i - 1); 
											
			i--;
			j++;
		}

funktioniert prima
 

Neue Themen


Zurück
Oben