Javaで、シーザー暗号化・複合化プログラムを作成せよ。という問題についてですが、普通に作ることはできたのですが、これをアルファベット以外はそのまま、keyは0~9の数値としたいのですが、どうしたらよいでしょうか。どうか回答よろしくお願いいたします。(Zの次はA、zの次はaというように。keyはずらす文字数のことです)
アルファベットのみ暗号化させるためにinputDataに1文字入っているとして、if( inputData >='A' && inputData <='z' ) {の一文を下の方の// 暗号化処理,// 復号化処理のそれぞれ2行下にそれぞれ付け加えておきましたが、うまく動作しません。
ソースコードは以下の通りです。
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public class Caesar extends JFrame implements ActionListener{
public static void main(String[] args) { // 自身のインスタンスを生成 new Caesar("シーザー暗号化・復号化プログラム"); } // 暗号化、復号化のラジオボタン JRadioButton rb1 = new JRadioButton("暗号化",true); JRadioButton rb2 = new JRadioButton("復号化"); // テキストフィールド JTextField txtField_input = new JTextField(50); JTextField txtField_output = new JTextField(50); JTextField txtField_key = new JTextField(3); // 変換ボタン JButton btn_convert = new JButton("変換"); // コンストラクタ Caesar(String str){ ButtonGroup bg = new ButtonGroup(); // ラジオボタンのグループ作成 JPanel p1 = new JPanel(); // パネル(ラジオボタンを載せる) JPanel p2 = new JPanel(); // 入力部分のコンポネートを載せる JPanel p3 = new JPanel(); // キー入力と変換ボタンを載せる JPanel p4 = new JPanel(); // p2とp3のパネルを載せる JPanel p5 = new JPanel(); // 出力部分のコンポーネントを載せる JLabel lbl_input = new JLabel("入力:"); JLabel lbl_key = new JLabel("key:"); JLabel lbl_output = new JLabel("暗号・復号化:"); super.setTitle(str); // ウィンドウのタイトルを設定 txtField_key.setText("3"); // Keyのデフォルト値 btn_convert.addActionListener(this); // イベントリスナを登録 bg.add(rb1); bg.add(rb2); p1.setLayout(new GridLayout(2,1)); p1.add(rb1); p1.add(rb2); p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS)); p2.add(lbl_input); p2.add(txtField_input); p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS)); p3.add(lbl_key); p3.add(txtField_key); p3.add(btn_convert); p4.setLayout(new GridLayout(2,1)); p4.add(p2); p4.add(p3); p5.setLayout(new BoxLayout(p5, BoxLayout.X_AXIS)); p5.add(lbl_output); p5.add(txtField_output); getContentPane().setLayout(new GridLayout(3, 1)); getContentPane().add(p1); getContentPane().add(p4); getContentPane().add(p5); // Xボタン処理 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Windowサイズを指定 setSize(640,240); // ウィンドウを表示 setVisible(true); } public void actionPerformed(ActionEvent e){ if(e.getSource() == btn_convert){ String inputData, inputKey; String outputData=""; int key; // 入力値を読み込む inputData = txtField_input.getText(); inputKey = txtField_key.getText(); key = Integer.parseInt(inputKey); if(rb1.isSelected()){ // 暗号化処理 for (int i=0; i<inputData.length(); i++) { if( inputData >='A' && inputData <='z' ) { outputData = outputData + String.valueOf((char)(inputData.charAt(i) + key)); } txtField_output.setText(outputData); } if(rb2.isSelected()){ // 復号化処理 for (int i=0; i<inputData.length(); i++) { if( inputData >='A' && inputData <='z' ) { outputData = outputData + String.valueOf((char)(inputData.charAt(i) - key)); } txtField_output.setText(outputData); } } }
}

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。