Erste Schritte Palindromtest

L

LokenID

Gast
Hi,

ich soll als Übung einen kleinen Palindromtester bauen. Hab mich mal durchgewurtschtelt mit dem Wissen das ich bis jetzt hab, leider läuft mein Progi nicht und ich finde den Fehler nicht. Wäre jemand so nett und gibt mir einen Tipp? Schonmal Danke :)

Java:
import IO.*;
public class palindrom{
   public static void main (String[] args) {
	
	char ch;
	int i=0;
        boolean palindrom=true; 

	char [] v = new char[15];

	System.out.println("Bitte Wort mit <= 15 Buchstaben eingeben: ");


	while ( Urc.readChar() && i < 15) {
	ch= Urc.getChar(); 
	ch= Character.toLowerCase(ch);
	v[i] = ch; //rein in das Array(?)
	i++;
	}

	int a=0;
	int b=v.length-1;

	while(a<v.length/2 ){ 
 		if(v[a]!=v[b]){ 
  		palindrom=false;} 
 		a++; 
  		b--;
	}
 
if(palindrom == true){ 

System.out.println("Dieses Wort ist ein Palindrom"); 
} 
else 
System.out.println("Dieses Wort ist kein Palindrom"); 


}
}
 
S

SlaterB

Gast
niemand kennt die Klasse Urc mit ihren Methoden readChar() usw., hängt dort das Programm?
was kommt danach als Array letztlich raus? gib das mit Arrays.toString() aus oder in einer Schleife,
System.out.println() kennst du ja bereits,
letztlich kannst du auch "otto".toCharArray() statt Eingabe verwenden, um diesen Teil abzuschließen
(und für den Test des Rests nicht jedes mal etwas neu eintippen zu müssen)

der eigentliche Code darunter sieht richtig aus, was ist denn der Fehler? falsches false oder falsches true bei welchem Beispiel?
gib in jedem Schleifendurchlauf wiederum mit System.out.println() die Indexe, die verglichenen chars und den aktuellen Wert der boolean-Variable aus
 
L

LokenID

Gast
Er gibt mir immer aus das das Wort kein Palindrom ist obwohl es eines sein muss.

Wir haben von unserem Prof eine IO.jar bekommen die uns beim Einlesen und Ausgeben helfen soll. Was sie genau macht weiß ich leider nicht.


Wie kann ich java sagen welche Array er für otto".toCharArray() nehmen soll?

Java:
"Otto".toCharArray();

	
String s = String.valueOf(v);
System.out.println(s);

funktioniert schonmal nicht.


Hab bisl rumprobiert, wenn ich Array nicht vorher benenne funktioniert das:

Java:
String s="otto";
        char v[]=s.toCharArray(); // Umwandeln in char-Array
        for (int j=0; j<v.length; j++)
            System.out.print(v[j]);
        System.out.println();

Die Überprüfung funzt, das Einlesen laut

String s = String.valueOf(v);
System.out.println(s);

Mein Problem liegt in der While-Schleife. Wenn ich die Wortlänge auf 4 Buchstaben beschränke, funktioniert es, genauso wenn ich den obrigen Code nehm und 15 mal den gleichen Buchstaben eingebe.
Wenn ich aber ein Wort mit weniger als 15 Buchstaben habe, muss ich die While-Schleife mit STRG+s oder d abbrechen. Entegen meiner Erwartung bekomme ich damit aber falsche Ergebnisse.
Nimmt er den Abbruchbefehl mit als Char?

Wie mach ich das am elegantesten? Erst die Anzahl der Buchstaben zählen lassen, das dann als Variable Abbruchbedingung in die While? Danke :)
 

chalkbag

Bekanntes Mitglied
Da du eigentlich schon alles hast, wirf IO.jar weg und nimmt den Scanner.

Java:
	public static void main(String... args){

		Scanner sc = new Scanner(System.in);

		String input = "";
		do{
			System.out.println("Bitte ein Wort mit maximal 15 Zeichen eingeben.");
			input = sc.nextLine();
		}while(input.length() > 15 || input.length() == 0);
		
		char[] v = input.toCharArray();
		boolean palindrom = true;
		int a=0;
	    int b=v.length-1;
	 
	    while(a<v.length/2 ){ 
	        if(v[a]!=v[b]){ 
	        	palindrom=false;
	        	break;
	        } 
	        a++; 
	        b--;
	    }
		if (palindrom){
			System.out.println("ist palindrom");
		}else{
			System.out.println("kein paldindrom");
		}
		
	}
 
S

SlaterB

Gast
wenn Urc.readChar() ein funktionierender Test ist, dann solltest du den vielleicht zwischen Zeile 15 und 16 im ersten Code einfügen,
if (test) break;

> Nimmt er den Abbruchbefehl mit als Char?

du hast doch so eine schöne Ausgabe des char-Arrays gepostet, also musst du doch genau wissen was an jeder Position steht?
 
L

LokenID

Gast
@SlaterB,

wie meinst du if (test) break? Hab nochmal unser ganzes Skript durchgeschaut, sowas hab ich noch nicht in meinem Arsenal

Nein, da steh nur das was ich auch eingeben will. Macht mich umso ratloser.

Kannst du mir noch sagen, wie man".toCharArray() benutzt wenn das Array vorher schon aufgestellt wurde? Klappt noch nicht

@chalkbag, cool danke. So einen Scanner haben wir aber noch nie benutzt, das nimmt mir mein Tutor nicht ab das ich das gemacht hab ^^
 
S

SlaterB

Gast
du kannst das if auch benutzen um den char nicht ins Array einzufügen und ohne große weitere Aktionen zur nächsten Schleifenüberprüfung + dann Abbruch weiterzugehen,

toCharArray() liefert ein char[], das man in einer neu deklarierten Variable oder in einer alten speichern kann,
mehr gibt es dazu nichts zu sagen
char[] x = ..;
oder
y = ..;
 
L

LokenID

Gast
Wenn ich zwischen Z. 15 und 16 ein If mit Abbruchbedingung einbau, auf was kann ich den Char überprüfen? Gibt es etwas wie if (ch == "leere Menge") break;?

ich meinte wie kann ich mit toCharArray() einem schon erstellten Array den char zuweisen. Wenn ich die (Index?)variable in die Klammer reinschreib funz es nicht
 
S

SlaterB

Gast
caste den char auf int und schau dir den Zahlenwert an, lerne durch Ausprobieren kennen, welche Zeichen wie aussehen,
hat aber nicht Urc.readChar() diese Funktion? wozu ist das gut?

toCharArray() erstellt immer ein neues Array, DANACH kannst du per Schleife Werte in ein anderes Array kopieren, wenn dir das lieber ist
 
L

LokenID

Gast
Hmm, denke Urc.readChar() ist das normale readChar() nur das beim Einlesen noch irgendwas zusätzlich gemacht wird. Muss mal nachfragen.

Danke für deine Hilfe, geb das Progi jetz mal so ab, mal schaun was er dazu sagt
 
L

LokenID

Gast
Falls noch mal jemand auf so ein Problem stößt:

Der Fehler war, dass er die Entertaste mit eingelesen und ans Wort drangepflanzt hat. Nur meine print Ausgabe, die ich zum Überpüfen eingebaut hatte, hat das nicht angezeigt. if (ch==’/n’) {break} in der Schleife sollte abhilfe schaffen oder gleich als String oder Word einlesen
 

Neue Themen


Oben