ユーザーが 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:それは動作します!(学習目的で)比較するためにスタックを使用する必要があるため、私がしなければならなかった方法は少し面倒です