0

ユーザーが JTextField に単語を入力し、それが回文であるかどうかを確認できるようにする GUI を使用してコードを作成しようとしています (つまり、小野は回文であり、前後に同じです)。JTextField を取得して文字に変換し、文が回文かどうかを確認するにはどうすればよいですか? (また、スペースや句読点などを削除するにはどうすればよいですか?) これが私の現在のコード設定です

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Stack;

/**
 * Write a description of class Palidromania_Kevin here.
 * 
 * @author Kevin Hy
 * @version 09/23/13
 */
public class Palindromania extends JFrame
{
    public JPanel panel1,panel2;
    public JLabel main1;
    public JButton check;
    public JTextField enterPal;
    public String inputWord,letter;
    public int num;
    public char checker;
    public Stack<String> stack = new Stack<String>();
    public Palindromania ()
    {
        super ("Palindromania Checker");
        setSize (1024,768);
        Container container = getContentPane();

        panel1 = new JPanel();     
        panel1.setBackground (new Color(10,50,50));
        panel1.setLayout (new FlowLayout());
        panel2 = new JPanel();     
        panel2.setBackground (new Color(255,255,255));
        panel2.setLayout (new FlowLayout());

        main1 = new JLabel ("Palindromania Checker");

        check = new JButton("Verify Palindrome");
        ButtonHandler handler = new ButtonHandler();
        check.addActionListener(handler);
        enterPal = new JTextField(8);
        container.add(panel1,BorderLayout.NORTH);
        container.add(panel2,BorderLayout.CENTER);
        panel2.add(enterPal);
        panel2.add(check);
        setVisible(true);
    }

    public static void main (String [] args)
    {
        Palindromania application = new Palindromania ();   
    }
    public class ButtonHandler implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
    {
        if (event.getSource () == check)//Check if palindrome button
        {
            inputWord="";letter="";
            inputWord=enterPal.getText();
            inputWord=inputWord.toLowerCase();
            inputWord=inputWord.replace("[ !'-,]","");
            for (int x=0; x<=inputWord.length()-1;++x)//inputs lettes into the stack
            {
                checker=inputWord.charAt(x);
                letter+=checker;
                stack.add(letter);
                letter="";
                JOptionPane.showMessageDialog (null, stack.peek());
            }
             for (int x=0; x<=inputWord.length()-1;++x)//inputs lettes into the stack
            {
                checker=inputWord.charAt(x);
                letter+=checker;
                stack.add(letter);
                if (letter.equals(stack.pop()))
                num+=1;
                letter="";
            }
            if (num==inputWord.length())
            JOptionPane.showMessageDialog (null, "You have a palindrome!");
            else
            JOptionPane.showMessageDialog (null, "This is not a palindrome, sorry!");
        }
    }
}

編集: コードを元に戻し、解析文字列を間違えました。char 文字をテストに入れることができ、char 文字に入って出力されるように見える単語を取得できます。

EDIT2:私の主な問題は、スタックに何かを追加することはできますが、文字列の .replace/.tolowercase が何もしないのはなぜですか? TextField に入力した文字列は置き換えられず (つまり、HELLO WORLD は helloworld ではなく HELLO WORLD のままです)、スタックには常に null があります。(つまり、HELLOはnullOLLEHになります)私もそれを文字列に入れようとしました

compare+=stack.pop();

しかし、それぞれにnullの文字を追加するだけですか? (nullnullO, nullOL nullOLL) なぜ null があるのですか?

EDIT3:それは動作します!(学習目的で)比較するためにスタックを使用する必要があるため、私がしなければならなかった方法は少し面倒です

4

1 に答える 1

1

あなたのコードにはいくつかの間違いがあります:

  1. まず、toUpperCase()この呼び出しの結果を変数に代入する必要があるため、機能しません。したがって、 this :inputWord.toLowerCase();を this : に置き換えますinputWord = inputWord.toLowerCase();。これはString、Java で不変であることから来ています。

  2. 単純な正規表現を使用してコードを簡素化することもできます。inputWord.replace("[ !',-]","");すべての呼び出しの代わりに使用して、結果を変数に置き換えて再度割り当てます。このような :inputWord = inputWord.replace("[ !',-]","");

  3. letterStringを初期化しないため、null になります。ループの少しletter=""前に追加するだけで、ヌルがなくなるはずです。

  4. そして最後にpop()スタックを使用して、ループの直後に逆の文字列を取得し、それを元の文字列と比較します。ちょうどこのような :

    if(inputWord.equalsIgnoreCase(stack.pop())){
           JOptionPane.showConfirmDialog(null, "This is a Palindrome", "Is this a palindrome ?", JOptionPane.YES_OPTION, JOptionPane.INFORMATION_MESSAGE);
    }
    else {
           JOptionPane.showConfirmDialog(null, "This is NOT a Palindrome", "Is this a palindrome ?", JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE);
    }
    
于 2013-09-25T13:00:35.060 に答える