gpt4 book ai didi

Java Unscrambling 字符串偶数长度有效但奇数长度无效

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:01:56 26 4
gpt4 key购买 nike

我正在编写一个具有多种编码方案的程序,其中一个是素数移位,基于 key 是偶数还是奇数。解码方案如下::

检查 key 是奇数还是偶数。对于奇数键,奇数字符在新字符串中排在第一位,然后是所有偶数索引。如果键是偶数,则所有偶数索引在前,然后所有奇数索引

所以对于字符串“abcdefg”和一个 27 的键,新字符串应该是“bdfaceg”如果 key 为 28,则新字符串应为“acegbdf”

奇怪的是如果 key 是奇数,并且字符串长度是奇数或偶数,则它可以完美解码。如果键是偶数且字符串长度是偶数,它将解码正常,

但如果 key 是偶数而字符串长度是奇数,则无法正确解码。

使用测试字符串“Enter Message Here”。这些是我的输出::

Encoded Key = 28 ; Encoded Message "EtrMsaehr.ne esg ee" Message length = 19
Decoded Key = 28 ; Decoded Message "E.tnreM seasegh renull"

所以偶数条目在正确的位置,但奇数条目要么需要反向拉动,要么需要按奇数索引推回,我认为......我认为将它们推回到索引是最简单的,但我对 Java 还是很陌生,我不知道该怎么做。

这是我在这个实例中使用的函数的代码。

protected String decode(String a, int k)
{
System.out.println(a.length());
String[] out = new String [a.length()];
String decode = a;
int key = k;
boolean kP = IsEven(key);
String odd = "";

if (kP)
{
//Key is even
try
{
int f = 0;
for (int i =0 ; i<(a.length()/2); i++)
{
out[f] = Character.toString(a.charAt(i));
f+=2;
}
int g = 1;
for (int i = (a.length()/2) ; i<(a.length()); i++)
{
out[g] = Character.toString(a.charAt(i));
g+=2;
}
}
catch ( IndexOutOfBoundsException e )
{
System.out.println("Out of bounds");
while(true)
break;
}
}
else
{
//key is odd
try
{
int f = 1;
for (int i =0 ; i<(a.length()/2); i++)
{
out[f] = Character.toString(a.charAt(i));
f+=2;
}

int g = 0;
for (int i = (a.length()/2) ; i<(a.length()); i++)
{
out[g] = Character.toString(a.charAt(i));
g+=2;
}
}
catch ( IndexOutOfBoundsException e )
{
System.out.println("Out of bounds");
while(true)
break;
}
}
for (int i = 0 ; i<a.length(); i++)
odd += out[i];
System.out.println(odd);
return(odd);
}

最佳答案

你的问题是,当它是一个偶数键和一个奇数字符串时,编码字符串的第一个“序列”中会多一个字符,而你没有考虑到这一点:

if the key was 28 the new string should be "acegbdf"

上面的例子有 4 个字符,然后是 3 个字符。

在您的代码中,您运行到 (a.length()/2),在上面的字符串中,它是 3,这意味着您使用索引 0、1 和 2。当您真正想要的是使用 0、1、2 和 3(“aceg”)。

解决方案是为偶数键的两个 for 循环中的条件加 1...这也将解决您未能告诉我们的越界异常!

只是一个警告:我相信我的“解决方案”会导致您的偶数长度字符串失败,但我的工作不是为您做功课。 :)

关于Java Unscrambling 字符串偶数长度有效但奇数长度无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18125457/

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