2016-11-16 2 views
1

Ich mache ein kleines Projekt für die Informatik. Ich mache einen Code, um zu testen, ob eine Zeichenketteneingabe ein Palindrom ist, oder eine Phrase, die gleich vorwärts und rückwärts ist, Bsp. "Rennauto" = "Rennauto", wenn rückwärts gelesen wird.meine Eingabe von "Scanner" wird nicht aufgezeichnet? Gibt nichts zurück

Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter a palindrome or something...: "); 
     String myLine = keyboard.nextLine(); 
     Palindrome test = new Palindrome(); 
     test.setPaly(myLine); 
     System.out.println(test); 

mein Scanner geht in eine Variable 'Myline', die ich in einer anderen Datei in mein anderes Stück Code werfen durch einen toString durch System.out.println(test) aus dem letzten Block des Codes genannt,:

public void setPaly(String setp) 
    { 
     in = setp; 
     boolean b1 = true; 
     int x = 0; 
     while(x<in.length()) 
     { 
      b1 = Character.isLetter(x); 
      if (b1 != false) 
      { 
       paly = paly + in.substring(x, x+1); 
      } 
      x++; 
     } 
    } 

sehen "Paly" und "In" sind beide vorinitialisiert, aber das ist nicht mein Problem ... meine Frage kommt hier: 'Paly' wird nie wirklich überschrieben. Warum ist das? Ich verstehe überhaupt nicht ... also bitte etwas gründlicher erklären, als nur eine Antwort zu geben.

ich codeboard.io bin mit diesem zu machen, und als solche können Sie in meinem vollständigen Code aussehen (falls Es ist eigentlich nicht Teil dieser Teile des Codes überhaupt) hier: -Link: (https://codeboard.io/projects/33278?view=21.1-2.0)

+1

Wenn Sie wollen, dass 'setPaly()' entscheidet, ob eine Eingabe ein Palindrom ist, dann sollten Sie eine 'boolean' Antwort zurückgeben, anstatt sie' void' zu behalten. Ich sehe auch nicht, wo 'in' initialisiert wird. –

+1

Fügen Sie einige temporäre system.out.prints in und um diese Schleife hinzu, damit Sie den Wert von in, x, paly usw. verfolgen können. Dies ist eine gute und einfache Debugging-Methode. Es wird Licht auf das werfen, was vor sich geht. –

+2

'Character.isLetter (x);' ... möchten Sie sich vielleicht daran erinnern, was 'x' *** wirklich *** ist ... Hinweis: kein Buchstabe. (zumindest nicht für kurze Strings) – Tom

Antwort

2

Dies ist ein sehr einfaches Problem, vielleicht sogar ein einfacher Tippfehler. Ihre Linie

b1 = Character.isLetter(x) 

ist, nehme ich an, an, wenn der Wert x in der Zeichenfolge ein Zeichen zu überprüfen versucht ist. Allerdings tut es nicht tun, dass aus ein paar Gründen.


x ist ein int. Wenn wir die Dokumente überprüfen finden wir folgende:

isLetter(int codePoint) 
Determines if the specified character (Unicode code point) is a letter. 

Wenn Sie isLetter das int übergeben (x, die von 0 bis zu einem gewissen relativ niedrigen Wert zählt), ist es einfach überprüft, ob diese Codepunkte Buchstaben sind. Der erste Unicode-Buchstabe befindet sich unter U + 0041. Wenn Sie in Ihrem Programm einen Wert eingeben, der länger als 41 Zeichen ist, werden Werte zurückgegeben.

Ich stelle mir vor, was Sie suchen, ist

b1 = Character.isLetter(in.charAt(x)); 

Dies ist ein einfaches conflation von Indexwerten mit Werten bei einem Index, ein Problem, das normalerweise precompile gefangen sein würde, aber nicht wegen die zusätzlichen Methoden von isLetter.

Da es nie zurückkehrt, da der Codepunkt ein Buchstabe ist (bis Sie über die ersten Steuerzeichen und Gubbins hinauskommen), ist die Bedingung einfach nie wahr und ändert daher nicht paly.

+0

omg ... Sie haben Recht. –

1

Ihr Hauptproblem ist nicht die Logik, sondern was Sie überprüfen.

 // .... 
     while(x<in.length()) 
     { 
      // This is actually checking the number stored in x 
      // a number is never a letter 
      b1 = Character.isLetter(x); 
      // ....   
     } 

Sie sollten in der setp für die char fragen und diesen Wert anstelle Kontrolle Versuchen

b1 = Character.isLetter(setp.charAt(x)); 
0

Mein zweiter Körper des Codes zu tun (die ich geschrieben) ist der Ort der Quelle mein Problem . Ich hatte versucht, int x zu referenzieren, aber in Wirklichkeit wollte ich etwas wie in.charAt(x) machen, das das Zeichen an der Stelle von x in der Eingabe referenzieren würde, die auf gleich gesetzt wurde.

+0

Ich fühle mich jetzt dumm, es war so einfach '(-___-)' –