我有一个方法可以循环移动给定输入字符串中的行 以下列方式移动每个块中的行。第一行保持不变。将第二行向左移动一个位置。将第三行向左移动两个位置。最后,将第四行向左移动三个位置。
我得到了正确的移动,但它只打印前16个字符......任何建议?输出应该是4x4块。已经尝试将for循环的长度切换为" inputStr.substring"整个字符串,但有错误
这就是我的......
public static String shiftRows(String str, int shiftNum)
{
char[] out = new char[4];
if(shiftNum==1)
{
out[0]=str.charAt(1);
out[1]=str.charAt(2);
out[2]=str.charAt(3);
out[3]=str.charAt(0);
}
if(shiftNum==2)
{
out[0]=str.charAt(2);
out[1]=str.charAt(3);
out[2]=str.charAt(0);
out[3]=str.charAt(1);
}
if(shiftNum==3)
{
out[0]=str.charAt(3);
out[1]=str.charAt(0);
out[2]=str.charAt(1);
out[3]=str.charAt(2);
}
return new String(out);
}
public static void main(String[] args)
{
System.out.println("SHIFT ROWS: " );
System.out.println();
String[] input= new String[4];
String[] output= new String[4];
String inputStr = "WVOGJTXQHUHXICWYYMGHTRKQHQPWKYVGLPYSPWGOINTOFOPMO";
for (int i = 0, n = 0; i < 4; i++, n+=4) {
input[i] = inputStr.substring(0+n, 4+n);
}
output[0] = input[0];
for(int i=1; i<4; i++)
{
output[i] = shiftRows(input[i],i);
}
for(int i=0; i<4; i++)
{
System.out.println(output[i]);
}
我的输出:
SHIFT ROWS:
WVOG
TXQJ
HXHU
YICW
我想要的输出:
WVOG
TXQJ
HXHU
YICW
YMGH
RKQT
PWHQ
GKYV
LPYS
WGOP
TOIN
MFOP
OAAA
AAAA
AAAA
AAAA
答案 0 :(得分:1)
假装shiftRows(s,0)只返回s(我真的这样做)。然后你将输出[i]设置为shiftRows(input [i],i)为i 0..3。 shiftRows总是返回一个4个字符的字符串,因此输出的所有元素都是一个4个字符的字符串,你只需要输出一次输出的所有元素,这样就可以按预期获得4个,4个字符的字符串。 / p>
另外,当你切断inputStr时,请考虑n。它增加4 4次(每次i增加1次,发生4次),所以它只从0到16,所以你也只消耗前16个字符inputStr。
我认为你想要将for循环分解为内部和外部循环。外部将消耗(比喻地,没有理由实际提取字符)来自inputStr的16个字符的块,并且内部循环将那些16分成4个4组,移位它们并打印它们。 / p>