Я изучаю Java последние недели (и новичок).Я пытаюсь закодировать программу, похожую на «Цезарь Цезаря», по-своему (конечно, не самый эффективный алгоритм), меняя буквы на 2 позиции после «текущей» буквы.Я пытаюсь решить это с помощью свинга.
Когда я тестирую его (затмение) без графического интерфейса, все работает правильно, например:
input : «Я здесь».- output : "k co jgtg."
Но так как я запускаю его через графический интерфейс, я получаю error в actionPerformed вконец кода: "outputField. setText (encryptInput (inputField.getText ()));"
Сообщение об ошибке : Метод setText () в типе JTextComponent не применим для аргументов (void).
Я полагаю, что проблема связана с моим методом «encryptedInput» и его «возвращаемым» значением.Я знаю, что пустота ничего не возвращает, но я чувствую, что system.out.println () как-то не подходит для моей части outputField / ActionListener.
Я проверил много тем, но, к сожалению, ничего не помогло.Или, по крайней мере, мой ограниченный опыт программирования не помогает мне распознать возможное решение по этим темам.
Надеюсь, кто-нибудь может мне помочь.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/* Caesar's Cipher function - 2 positions (indexes) after. */
public class CaesarCipher extends JFrame implements ActionListener{
JLabel inputLabel, outputLabel;
JButton calculatebtn;
JTextField inputField, outputField;
GridLayout grid;
String encryptedString;
public CaesarCipher()
{
setTitle("Caesar Cipher Converter");
setSize(350,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inputLabel = new JLabel("Put your Text here : ");
inputField = new JTextField(20);
outputLabel = new JLabel("Result : ");
outputField = new JTextField(20);
calculatebtn = new JButton("Convert");
grid = new GridLayout(5,1);
JPanel pane = new JPanel();
pane.setLayout(grid);
setContentPane(pane);
pane.add(inputLabel);
pane.add(inputField);
pane.add(calculatebtn);
pane.add(outputLabel);
pane.add(outputField);
calculatebtn.addActionListener(this);
}
public static void main(String[] args) {
CaesarCipher caeCipher = new CaesarCipher();
caeCipher.setVisible(true);
}
public void encryptInput(String inputString)
{
/* Array to calculate the new values (a-z)*/
char[] caesArray = {'a', 'b', 'c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r','s','t',
'u','v','w','x','y','z', ' ', '.'};
/* Array for users input */
char[] inputArray = new char[inputString.length()];
char resultChar= ' ';
/* saves the String characters into the inputArray */
for(int i = 0 ; i < inputArray.length; i++)
{
inputArray[i] = inputString.charAt(i);
}
for(int i = 0 ; i < inputArray.length ; i++)
for(int j = 0 ; j < caesArray.length ; j++)
{
if (caesArray[j] == inputArray[i])
{
/* My special characters */
switch(inputArray[i])
{
case ' ': resultChar = ' ';
break;
case '.': resultChar = '.';
break;
}
if(inputArray[i] == caesArray[caesArray.length - 1])
{
inputArray[i] = caesArray[1];
}
else if(inputArray[i] == caesArray[caesArray.length - 2])
{
inputArray[i] = caesArray[0];
}
else
{
resultChar = caesArray[j+2];
}
System.out.print(resultChar);
}
}
}
@Override
public void actionPerformed(ActionEvent arg0)
{
if(arg0.getSource() == calculatebtn)
{
outputField.setText(encryptInput(inputField.getText()));
}
}
}