如何在字符移位后读取和打印字符串的整个输入?
How to read and print entire input of a string after a char shift?
我有一种方法可以循环移动给定输入字符串中的行
按以下方式移动每个块中的行。第一行保持不变。将第二行向左移动一位。将第三行向左移动两个位置。最后,将第四行向左移动三个位置。
我得到了正确的移位,但是它只打印了前 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
假装 shiftRows(s, 0) 只是 returns s(我真的会这样做)。然后将 output[i] 设置为 shiftRows(input[i], i) for i 0..3。 shiftRows 总是 returns 一个 4 字符的字符串,所以输出的所有元素都是一个 4 字符的字符串,你打印一次输出的所有元素,所以你得到 4, 4 个字符串,正如预期的那样。
另外,当你分解 inputStr 时,想想 n。它增加了 4 4 次(每次 i 增加 1 时,发生 4 次),所以它只从 0 到 16,所以你也只消耗 inputStr.[=10 的前 16 个字符=]
我认为您想将 for 循环分成内循环和外循环。外部将从 inputStr 中消耗(打个比方,没有理由实际提取字符)16 个字符的块,内部循环会将这 16 个字符分成 4 组,每组 4 个,移动它们,然后打印它们。
我有一种方法可以循环移动给定输入字符串中的行 按以下方式移动每个块中的行。第一行保持不变。将第二行向左移动一位。将第三行向左移动两个位置。最后,将第四行向左移动三个位置。
我得到了正确的移位,但是它只打印了前 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
假装 shiftRows(s, 0) 只是 returns s(我真的会这样做)。然后将 output[i] 设置为 shiftRows(input[i], i) for i 0..3。 shiftRows 总是 returns 一个 4 字符的字符串,所以输出的所有元素都是一个 4 字符的字符串,你打印一次输出的所有元素,所以你得到 4, 4 个字符串,正如预期的那样。
另外,当你分解 inputStr 时,想想 n。它增加了 4 4 次(每次 i 增加 1 时,发生 4 次),所以它只从 0 到 16,所以你也只消耗 inputStr.[=10 的前 16 个字符=]
我认为您想将 for 循环分成内循环和外循环。外部将从 inputStr 中消耗(打个比方,没有理由实际提取字符)16 个字符的块,内部循环会将这 16 个字符分成 4 组,每组 4 个,移动它们,然后打印它们。