gpt4 book ai didi

java - 输出问题,用户输入通过 void 函数后的输入(Caesar's Cipher、Java、swing)

转载 作者:行者123 更新时间:2023-12-02 10:11:30 26 4
gpt4 key购买 nike

我最近几周正在学习java(也是菜鸟)。我正在尝试用我自己的方式编写一个类似于“Caesars Cipher”的程序(当然不是最有效的算法),将“当前”字母后的字母更改2个位置。我正在尝试借助 swing 来解决这个问题。

当我在没有 GUI 的情况下测试它(eclipse)时,一切正常,例如:

输入:“我在这里。” - 输出:“k co jgtg。”

但是由于我通过 GUI 运行它,因此我在代码末尾的 actionPerformed 中收到错误:“outputField.setText(encryptInput(inputField.getText()));”

错误消息:JTextComponent 类型中的方法 setText() 不适用于参数 (void)。

我相信问题来 self 的方法“encryptedInput”及其“返回”值。我知道 void 不会返回任何内容,但我觉得 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()));
}
}

}

最佳答案

这是因为:

  • 您的方法 encryptInput 不返回任何内容(返回类型为 void)
  • setText 方法接受 String 作为参数

encryptInput 的末尾,您的方法只是在每次计算时将 resultChar 打印到标准输出。您需要更改它才能返回一个 String,其中包含您正在显示的所有 resultChar 的串联。

有很多方法可以做到这一点,这是一个简单的示例,仅使用您似乎知道的工具:

public String 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= ' ';
char[] resultArray = new char[inputString.length()];

/* 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);
resultArray[i] = resultChar;
}
}
return new String(resultArray);
}

P.S.:更一般地说,这段代码肯定可以改进,但这超出了该问题的范围:)

关于java - 输出问题,用户输入通过 void 函数后的输入(Caesar's Cipher、Java、swing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com