在我开始之前,我想告诉你,我是Java的初学者,所以请原谅我没有受过教育的错误。我一直在尝试编写一个应用程序来加密消息。在此过程中,输入将转换为数字以允许数学表达式。问题是尝试转换时。实际的代码确实有效,但转换一个5个字母的单词需要相当长的时间,这个单词是“Hello”(需要大约10秒左右)。以下是输入转换的方法。 `
public static void encrypt(String plainText) {
Random random = new Random();
plainText =plainText.toUpperCase();
char[] storedInput = plainText.toCharArray();
int[] convertedInput = new int[plainText.length()];
for (int indexSelector = 0, comparisonNumber = 1; indexSelector < plainText.length(); comparisonNumber++) {
if( storedInput[indexSelector] == ' ') {
System.out.print(" <SPACE> ");
}
else {
if( ((int) storedInput[indexSelector]-64) == comparisonNumber) {
int converter = storedInput[indexSelector] - 64;
convertedInput[indexSelector] = converter;
System.out.print(convertedInput[indexSelector]);
}
else {
continue;
}
}
}
}
此代码接受输入(hello),将所有字母转换为大写,然后当我得到整数时,我减去64,因为它返回ASCII整数。在此A变为1之后,B变为2,C变为3,依此类推...... 当我尝试转换hello(或任何其他单词)时,至少需要8秒钟。有关为什么的任何建议?
答案 0 :(得分:1)
您需要简化程序。 comparisonNumber
导致您遇到重大问题,除非您确实知道自己在做什么,否则通常应该避免for
循环中的多个变量。即使在专业设置中,我也会考虑,
循环中的for
一个需要证明其合理性的问题。
在你的情况下,你正在循环comparisonNumber
但是从不使用它来做任何事情,只是验证你找到了正确的数字,然后你忽略了它并做了独立于它的操作。由于您没有重置该值,因此它会循环显示所有可能的值,然后继续处理下一个字母。
这是一个可能更接近您所寻找的版本,我只是移除了该变量并将其他所有内容保留原样。
public static void encrypt(String plainText) {
Random random = new Random();
plainText.toUpperCase();
char[] storedInput = plainText.toCharArray();
int[] convertedInput = new int[plainText.length()];
for (int indexSelector = 0; indexSelector < plainText.length(); indexSelector++) {
if( storedInput[indexSelector] == ' ') {
System.out.print(" <SPACE> ");
} else {
int converter = storedInput[indexSelector] - 64;
convertedInput[indexSelector] = converter;
System.out.print(convertedInput[indexSelector]);
indexSelector++;
}
}