Java 字符串插入的循环问题
所以我的上一个问题出轨了,但我解决了问题(编译错误,很多)。现在我至少有一个逻辑错误,也许两个。该程序的目的是通过反转字符串并在每个“实”字符之间添加一定数量的随机字母来“加密”字符串,具体取决于“难度”值。是代码的全部 下面是我认为会给我带来问题的部分,更具体地说,我很确定这与我的Java 字符串插入的循环问题,java,Java,所以我的上一个问题出轨了,但我解决了问题(编译错误,很多)。现在我至少有一个逻辑错误,也许两个。该程序的目的是通过反转字符串并在每个“实”字符之间添加一定数量的随机字母来“加密”字符串,具体取决于“难度”值。是代码的全部 下面是我认为会给我带来问题的部分,更具体地说,我很确定这与我的x=x+diff语句有关,但我不知道如何移动“光标”。 --从Decryptor.java中剪切-- /** decryptString使用难度作为增量对代码进行解密。 @param编码加密的字符串 @return已
x=x+diff
语句有关,但我不知道如何移动“光标”。
--从Decryptor.java中剪切--
/**
decryptString使用难度作为增量对代码进行解密。
@param编码加密的字符串
@return已解密已解密的字符串
*/
公共字符串解密字符串(字符串代码)
{
int length=code.length();
int x=0;//到1
encryptedStr=代码;
String codeRev=新的StringBuilder(代码).reverse().toString();
StringBuilder decrypted=新StringBuilder();
对于(int pos=0;pos我很确定这应该是一个更严格的pos
:
for (int pos = 0; pos < length - 1; pos++)
然后删除x。如果(diff==0)
我很确定这应该是一个更严格的pos
:
for (int pos = 0; pos < length - 1; pos++)
如果(diff==0)算法中有一些错误,只需跳过for
。
首先,您不希望迭代长度
,因为字符串的长度正在更改。
解决方案:这对我来说非常有效
public static String decryptString(String code)
{
int length = code.length();
int x = 0;
String codeRev = code;
StringBuilder decrypted = new StringBuilder();
while(x < codeRev.length())
{
for(int i = x; i< x + diff && i < codeRev.length();i++)
decrypted.append(codeRev.charAt(i));
x += diff + 1;
}
decrypted = decrypted.reverse();
return(decrypted).toString();
}
public static String encryptString(String str)
{
int length = str.length();
String origStr = str;
int x = diff;
StringBuilder codeRev = new StringBuilder(str).reverse();
while (x < codeRev.length())
{
codeRev.insert(x, " ");
x += diff + 1;
}
return(codeRev).toString();
}
公共静态字符串解密字符串(字符串代码)
{
int length=code.length();
int x=0;
字符串codeRev=代码;
StringBuilder decrypted=新StringBuilder();
而(x
算法中有一些错误。
首先,您不希望迭代长度
,因为字符串的长度正在更改。
解决方案:这对我来说非常有效
public static String decryptString(String code)
{
int length = code.length();
int x = 0;
String codeRev = code;
StringBuilder decrypted = new StringBuilder();
while(x < codeRev.length())
{
for(int i = x; i< x + diff && i < codeRev.length();i++)
decrypted.append(codeRev.charAt(i));
x += diff + 1;
}
decrypted = decrypted.reverse();
return(decrypted).toString();
}
public static String encryptString(String str)
{
int length = str.length();
String origStr = str;
int x = diff;
StringBuilder codeRev = new StringBuilder(str).reverse();
while (x < codeRev.length())
{
codeRev.insert(x, " ");
x += diff + 1;
}
return(codeRev).toString();
}
公共静态字符串解密字符串(字符串代码)
{
int length=code.length();
int x=0;
字符串codeRev=代码;
StringBuilder decrypted=新StringBuilder();
而(x
尚未验证您的代码,但应该不会太难
对于解密,假设我们有一个字符串
A_B_C_D (difficulty = 1),
您可以做的是将光标设置到末尾(并附加到结果):
对于每次迭代,向后移动diff+1
元素,例如在本例中向后移动2
A_B_C_D
^
直到您通过索引0。
这是psuedo代码
String decrypt(String encryptedString) {
int i = encryptedString.length() - 1;
String result = "" ; // use a String builder in real life of course
for (int i = encryptedString.length() - 1 // last index
; i >= 0
; i -= (diff + 1) ) {
result += encryptedString[i];
}
return result;
}
就是这么简单,这样可以避免在不损失可读性的情况下执行反向操作(从而节省不必要的内存浪费)的额外步骤
加密更容易:
String encrypt (String input) {
String result;
for (int i = input.length() - 1
; i >= 0
; --i) {
result += input[i];
if (i > 0) {
append "diff" number of random character to result
}
}
return result;
}
尚未验证您的代码,但应该不会太难
对于解密,假设我们有一个字符串
A_B_C_D (difficulty = 1),
您可以做的是将光标设置到末尾(并附加到结果):
对于每次迭代,向后移动diff+1
元素,例如在本例中向后移动2
A_B_C_D
^
直到您通过索引0。
这是psuedo代码
String decrypt(String encryptedString) {
int i = encryptedString.length() - 1;
String result = "" ; // use a String builder in real life of course
for (int i = encryptedString.length() - 1 // last index
; i >= 0
; i -= (diff + 1) ) {
result += encryptedString[i];
}
return result;
}
就是这么简单,这样可以避免在不损失可读性的情况下执行反向操作(从而节省不必要的内存浪费)的额外步骤
加密更容易:
String encrypt (String input) {
String result;
for (int i = input.length() - 1
; i >= 0
; --i) {
result += input[i];
if (i > 0) {
append "diff" number of random character to result
}
}
return result;
}
因此,您重组它的方式当然是有意义的,但我无法让程序再正确运行了。下面是我得到的运行时错误:======================================================================模拟难度级别0:线程“main”java.lang.OutOfMemoryError中的异常:java.util.Arrays.copyOf中的java堆空间(Arrays.java:3332)在java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)在java.lang.AbstractStringBuilder.EncurrencAcityInternal(AbstractStringBuilder.java:121)在java.lang.StringBuilder.insert(AbstractStringBuilder.java:1187)在java.lang.StringBuilder.encryptString.insert(StringBuilder.java:338)在Encryptor.encryptString(Encryptor.java:32)在Simulator.main(Simulator.java:28)尝试调试并找到问题。因此,您重新构造它的方式肯定是有意义的,但我无法使程序再正确运行。下面是我得到的运行时错误:==============================================================================模拟难度级别0:线程“main”中的异常java.lang.OutOfMemoryError:java.util.Arrays.copyOf(Arrays.java:3332)java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)java.lang.AbstractStringBuilder.java:1187在Simulator.main(Simulator.java:28)中的Encryptor.encryptString(Encryptor.java:32)中的java.lang.StringBuilder.insert(StringBuilder.java:338)尝试调试并找到与上述方法相反的问题,您的方法不会导致运行时错误,并且似乎也在正确的轨道上,但它仍然存在