Java 字符串生成中的逻辑错误
我有一个我正在编写的程序,它应该对一组预先确定的字符串进行加密和解密。提供了主类,我必须编写依赖项,但是没有正确调用我的对象,从而造成了大量编译时错误。这两个依赖项各自可以很好地编译,因此我必须在类之间的接口中犯一个错误。这是相当多的代码,因此这里有一个pastebin链接: 编辑:现在我发现了主要的逻辑错误。我知道它在加密程序中,也可能在解密程序中,但我以前独立使用过解密程序,我在这里所做的只是将X从一个固定值更改为难度 编辑2:现在已经修复了randChar,现在我只需要找出我的en/decrypt循环中的错误 以下是我的新错误/输出:Java 字符串生成中的逻辑错误,java,for-loop,Java,For Loop,我有一个我正在编写的程序,它应该对一组预先确定的字符串进行加密和解密。提供了主类,我必须编写依赖项,但是没有正确调用我的对象,从而造成了大量编译时错误。这两个依赖项各自可以很好地编译,因此我必须在类之间的接口中犯一个错误。这是相当多的代码,因此这里有一个pastebin链接: 编辑:现在我发现了主要的逻辑错误。我知道它在加密程序中,也可能在解密程序中,但我以前独立使用过解密程序,我在这里所做的只是将X从一个固定值更改为难度 编辑2:现在已经修复了randChar,现在我只需要找出我的en/de
==============================
Simulating difficulty level 0:
Encrypting String: kitty ...
Encrypted as: xvrdsoyttik
Decrypting String: xvrdsoyttik ...
Decrypted as: kkkkkkkkkkkk
Fail!
==============================
Simulating difficulty level 1:
Encrypting String: test string ...
Encrypted as: gqpyqfdqqwvcqnirts tset
Decrypting String: gqpyqfdqqwvcqnirts tset ...
Decrypted as: test strinqcvwqqdfqypqg
Fail!
==============================
Simulating difficulty level 2:
Encrypting String: Agent: James Bond ...
Encrypted as: dnjomBe bsveimqaiJa :tnegA
Decrypting String: dnjomBe bsveimqaiJa :tnegA ...
Decrypted as: Aet James Bon
Fail!
==============================
加密机:
/**
encryptString encrypts the string, as well as stores the original for later use
@param str The string to be encrypted
@return encrypted The encrypted string
*/
public String encryptString(String str)
{
int length = str.length();
origStr = str;
int x = diff;
StringBuilder codeRev = new StringBuilder(str).reverse();
for (int pos = 0; pos <= length; pos++)
{
if (x <= length + diff) //removed
{
codeRev.insert(x, randomLetter());
}
x = x + diff + 1;
}
encryptedStr = codeRev.toString();
return(codeRev).toString();
}
这个错误非常直接-在
解密程序中没有getDecryptedStr()
方法,在加密程序中没有getEncryptedStr()
方法
一般来说,如果您遇到这些错误,看起来您没有使用任何IDE。你应该从一个开始工作,像或。您将立即看到此类编译错误我认为没有人会阅读所有230行代码。提取问题并仅发布相关代码。如果你不告诉我们这些编译器错误是怎么说的,你认为任何人都能发现你的问题吗?修复了编译时错误,现在我能想到的只有两个逻辑错误。我的循环增量肯定有问题,但我无法解决。谢谢,我大约两分钟前就发现了!我正在使用textpad++和一些插件,我将在将来研究eclipse,谢谢。不幸的是,一些逻辑错误已经漏掉了,即在加密/解密过程中,你愿意帮忙吗?@brodieR-你的问题是x出现了未知字符,这一定是randChar的错,但是您对encrypt-decrypt的修复似乎没有明显的区别我不是在说randChar,我是在说decryptString(String code)
-如果x=length,您将得到超出范围的索引,因为charAt()的工作范围是从0到length-1。它应该是x
/**
decryptString decrypts the code based on using the difficulty as the increment.
@param code The encrypted string
@return decrypted The decrypted string
*/
public String decryptString(String code)
{
int length = code.length();
int x = 0; //to 1
encryptedStr = code;
String codeRev = new StringBuilder(code).reverse().toString();
StringBuilder decrypted = new StringBuilder();
for (int pos = 0; pos <= length; pos++)
{
if (x < length) //removed <=
{
decrypted.append(codeRev.charAt(x));
}
x = x + diff;
}
decryptedStr = decrypted.toString();
return(decrypted).toString();
}
/**
Generates a random letter
@return letter The random letter
*/
public char randomLetter()
{
Random ranChar = new Random();
char cr = (char)(ranChar.nextInt(26)+ 'a');
return cr;
}