Question

Je suis en train de travailler sur une affectation pour ma programmation de classe, mais j'ai éprouvé quelques difficultés et je ne sais pas où d'autre à regarder.Fondamentalement, la question nous demande d'écrire un programme qui vérifie pour les palindromes.

  • L'utilisateur saisit du texte (Pas de non-alphanumberic caractères autorisés.)
  • La Chaîne est poussé un caractère à la fois dans une pile
  • Les personnages sont retirés un à un de la pile ainsi, l'inversion de la Chaîne de
  • Si l'original est la même qu'à l'inverse, nous avons un palindrome

Je vais avoir quelques problèmes avec mes boucles et si vous ne savez pas où aller à partir d'ici, quelqu'un aurait-il des conseils ou des pointeurs?Ce que je fais mal?

Voici ce que j'ai jusqu'à présent.

import java.util.Stack;
import java.util.regex.*;
import javax.swing.*;

public class Question1 {

    static Stack PDrome = new Stack();

    public static String Reverse (String input) {
        String reverse;

        if (input.length() <= 1) {
            return input;
        }   

        //pushing onto the stack
        for (int i=0; i<input.length();i++) {
            PDrome.push(input.charAt(i));
        }


        //popping from the stack into the string
        for (int i=0; i<input.length(); i++) {  
            PDrome.pop()=reverse.charAt(i);
        }  

        return reverse;
    }

    //Illegal char check method
    public static boolean checker (String input) {
        Pattern p = Pattern.compile("[^a-z0-9]", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(input);
        boolean b = m.find();

        if (b) {
            System.out.println("There is a special character in your string");   
            System.exit(0);
        }   

        return b;    
    }


    //Main
    public static void main (String [] args) {
        //input
        String input = JOptionPane.showInputDialog("Enter text to check if it's a palndrome");

        //error case
        if (input==null); {
            System.out.println("Nothing Entered");
            System.exit(0);
        }

        //checking for illegal chars
        checker(input);
    }
}
Était-ce utile?

La solution

Cette partie:

String reverse;
...
//popping from the stack into the string
for (int i=0; i<input.length(); i++)
{   
    PDrome.pop()=reverse.charAt(i);
}  

devrait être comme ceci:

String reverse = "";
...
//popping from the stack into the string
for (int i=0; i<input.length(); i++)
{   
    // appends the popped character to reverse
    reverse += PDrome.pop();
}  

Notez que lorsque lorsque l'Ajout d'un grand nombre de chaînes, ce n'est pas le meilleur moyen de le faire car Java's String est immuable et à plusieurs reprises en ajoutant une chaîne nécessiterait de créer une nouvelle chaîne à chaque fois.Ce problème est suffisamment petit pour que cela ne compterait pas vraiment, mais lorsque le problème devient grand, vous voudrez utiliser StressBuffer / StringBuilder.

Autres conseils

PDrome.pop()=reverse.charAt(i); est faux.

  1. l'inverse est nul -> NullPointerException
  2. Êtes-vous affectation d'une valeur à une fonction?(pop())

Vous devez construire revers de la pop'ping de la pile.

Donc, vous devriez commencer avec une chaîne vide: reverse = ""; et ajouter les chars pris à partir de la pile:

while (!PDrome.isEmpty())
   reverse += PDrome.pop();

Nommage de détails

Veuillez utiliser des lettres majuscules pour démarrer les champs et les noms de méthode:

"someIntegerVariable"
"methodForCalculation"

et seules les majuscules de début de la classe et les noms d'interface:

Stack
ArrayList
MyClass

:)

(à partir de l'conventions Java)

De quoi êtes-vous en train de faire ici?

PDrome.pop()=reverse.charAt(i);

Vous devriez utiliser PDrome.pop() afin de récupérer un char à un moment et l'ajouter à reverse.

C'est un moyen beaucoup plus propre de l'écrire à mon avis.C'est une approche récursive.

bool isPalindrome(String s)
{
    if(s.length() <= 1)
        return true;

    return s[0] == s[s.length() - 1] && isPalindrome(s.substr(1, s.length() - 2);
}

Il est beaucoup plus court que vous pouvez le voir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top