- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近几周正在学习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/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!