2016-03-26 6 views
0

Unten ist der Code, den ich geschrieben habe, damit ein Benutzer ein paar verschiedene Strings eingibt, prüft, ob jeder ein Palindrom ist und nur das Palindrom zurückgibt. Momentan werden alle eingegebenen Zeichenfolgen zurückgegeben. Es scheint, dass die IF-Anweisung, wenn nicht korrekt funktioniert. Irgendwelche Vorschläge, wie die richtigen Strings zurückgegeben werden können?Warum gibt dies nicht nur die Zeichenfolge zurück, wenn es ein Palindrom ist?

import java.util.Scanner; 

public class hh { 

static void checkPalin() { 
// creates a scanner 
Scanner input = new Scanner(System.in); 
int i = 0; 
String userInput = ""; 

// asks the user for the number of strings 
System.out.print("Enter the number of strings: "); 

StringBuilder sentence = new StringBuilder(userInput); 

StringBuilder palindrome = new StringBuilder(); 

// stores the number of strings user will enters 
int stringNumber = input.nextInt(); 

// prompts the user to enter in their sentences 
System.out.println("Enter the strings:"); 

// this loop will go until the number of strings entered are entered 
while(i <= stringNumber){ 

    userInput = input.nextLine(); 
    if(sentence.reverse().equals(sentence)){ 
    palindrome.insert(0, " " + userInput); 
    } 
     i ++; 
} 
// if(sentence == sentence.reverse()){ 
System.out.println("The palindromes are: " + palindrome); 
} 


public static void main(String[] args) { 

    checkPalin(); 
} 
} 
+0

Sie müssen String Satz = new Stringbuilder (userinput) bewegen; in der Schleife. Satz ist die ganze Zeit leer – Turo

Antwort

1

Sie müssen die String vom StringBuilder mit der toString Methode erstellen, bevor equals Aufruf:

if(new StringBuilder(userInput).reverse().toString().equals(userInput)) { ... } 
+0

das funktioniert aber würde es einen Weg geben, um Groß- und Kleinschreibung zu ignorieren und die Leerzeichen zu ignorieren? –

+0

'if (neuer StringBuilder (userInput.toLowerCase(). ReplaceAll (" \\ s + "," ")). Reverse(). ToString(). EqualsIgnoreCase (userInput))) {....}' vergib mir wenn Es gibt einen Fehler von Klammern –

0

Sie haben so etwas wie

new StringBuilder(sentence.toString()).reverse().equals(sentence) 

in Ihrem wenn

1
schreiben

Wenn Sie deklinieren sind

StringBuilder Satz = neuer StringBuilder (userInput);

Die Variable "Satz" ändert sich nicht, wenn sich userInput ändert. Sie müssen den StringBuilder jedes Mal neu erstellen, wenn Sie ihn benötigen. Hier

ist der feste Code:

static void checkPalin() { 

    Scanner input = new Scanner(System.in); 
    int i = 0; 
    String userInput = ""; 

    System.out.print("Enter the number of strings: "); 

    StringBuilder palindrome = new StringBuilder(); 
    int stringNumber = input.nextInt(); 

    System.out.println("Enter the strings:"); 

    while (i <= stringNumber) { 
     userInput = input.nextLine(); 
     String reversed = new StringBuilder(userInput).reverse().toString(); 
     if (reversed.equals(userInput)) { 
      palindrome.insert(0, " " + userInput); 
     } 

     i++; 
    } 
    System.out.println("The palindromes are: " + palindrome); 
} 
Verwandte Themen