如何在字符移位后读取和打印字符串的整个输入?

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 个,移动它们,然后打印它们。