2017-10-04 1 views
-5
class palindrome 
{ 
    public static void main(String args[]) 
    { 
     String s1=new String(); 
     Scanner sc= new Scanner(System.in); 
     System.out.println("Enter the string:"); 
     s1=sc.nextLine(); 
     StringBuffer s2=new StringBuffer(s1); 
     s2.reverse().toString();  
     if(s1.equals(s2.toString())) 
      System.out.println("Given String is palindrome"); 
     else 
      System.out.println("Given String is not palindrome"); 
    } 
} 

Dies ist mein Code zu überprüfen, ob ein string Palindrom ist oder nicht.Wie Java String und Stringbuffer arbeitet

ich die richtige Ausgabe, aber ich habe 2 Fragen:

1) Warum können wir

2) Wenn ich if(s1.equals(s2)) schreiben, statt nur mit einem if Zustand und direkt übersprungen nicht toString wie s1.toString() verwenden else Bedingung ist in der Ausgabe ausgeführt, warum?

+1

1: s1 ist bereits ein String. Sie können immer noch s1.toString() verwenden, aber das ist ziemlich überflüssig. 2. s2 ist kein String. Eine Zeichenkette (s1) kann nicht gleich einer Zeichenkette sein, die keine Zeichenkette ist (s2), daher muss zuerst s2 konvertiert werden. –

+1

Ich habe versucht, diese Frage zu bearbeiten, verstand aber die zweite Frage noch nicht wirklich: - | – notyou

+1

@JamesMacca, aber wenn Sie die Frage lesen, es funktioniert, das Problem ist nicht über das Palindrom, sondern über 'String' und' StringBuffer'. – AxelH

Antwort

0

In Ihrem Fall ist s1 ein String und s2 ist StringBuffer.

Die Methode equals der Object-Klasse gibt true zurück, wenn diese Instanz gleich dem Argument ist. Deshalb haben Sie s1.equals (s2) als falsch.

Aber wenn Sie die s2 in einen String konvertieren, dann wird das wahre Wert geben. Da die toString() - Methode des Zeichenfolgengenerators den String-Wert zurückgibt. Bitte lesen Sie den Unterschied zwischen String und StringBuffer und StringBuilder.

und toString(). equals() - und hashCode() - Methoden der Object-Klasse.

0

Zunächst einmal, erstellen Sie kein neues String-Objekt mit new String(). Strings sind spezielle Objekte, und Sie sollten sie mit dem new Schlüsselwort nicht instanziiert, sondern die Verwendung der String-Konstanten-Pool machen, wie folgt:

String s1 = "value"; // with value assignment 
String s2; // without value assignment 

Nun, da diese aus dem Weg ist, lassen Sie mich auf Ihre Frage bekommen.

[1] Sie können.toString() auf einem String-Objekt verwenden, aber warum sollten Sie? Es macht keinen Sinn, eine Zeichenfolge in eine Zeichenfolge zu "konvertieren".

[2] Wenn ich verstehe Ihre richtige Frage, während der Prüfung Sie höchstwahrscheinlich in einem Wort eingegeben, die mit einem Großbuchstaben beginnt, wenn Sie also in Rotor und das Programm kehrt es geben, es endet als rotoR, und diese zwei Strings sind nicht gleich. String#toLowerCase beseitigt dieses Problem.

Ich habe Ihren Code verbessert:

String text; 

Scanner sc = new Scanner(System.in); 
System.out.println("Enter your message:"); 
text = sc.nextLine().toLowerCase(); 

String reversedText = new StringBuilder(text).reverse().toString(); 

if (text.equals(reversedText)) { 
    System.out.println("Congratulations, it's a palindrome!"); 
} else { 
    System.out.println("Just another plain normal String..."); 
} 
Verwandte Themen