/ *这里是完整的问题:
编写一个名为printSquare的方法,该方法接受两个整数参数(最小值和最大值),并以正方形模式打印介于min到max(含)之间的数字。通过示例比通过解释更容易理解正方形模式,因此请在下表中查看示例方法调用及其产生的控制台输出。

正方形的每一行都包含一个在最小和最大之间递增整数的循环序列。每行打印此序列的不同排列。第一行以min开头,第二行以min +1开头,依此类推。当任何一行中的序列达到最大值时,它会回绕到最小值。

您可以假设方法的调用者将传递一个min和一个max参数,以使min小于或等于max。 * /

嗨,大家好,我有这个问题我无法解决。叫这个方法printSquare(1,5);
获得此输出:

12345

23451

34512

45123

51234


到目前为止,这是我的代码。我似乎无法让前面的数字转移到后面。

public static void printSquare (int startNum, int height){

        if (startNum == height){
            System.out.print(height);
            return;
        }

        for (int i = startNum; i <= height; i++){
            int max = startNum;
            int j = i;
            for (j = i; j <= height; j++){
                System.out.print (j);
            }

        System.out.println();
        }
}

最佳答案

如果您的内部循环以i开头,则必须以height + i结束,而不仅仅是height才能使输出为正方形,否则它将是一个三角形。您想了解模运算符%以确定除法的余数,以便处理“溢出”。

您给出的规范尚不清楚startNum != 1对于“溢出”应如何处理。

此外,如果(startNum == height)实际表示高度(并且因为它表示printSquare为宽度),则保护条件height显然是错误的。我希望printSquare(4, 4)打印四行和四列,而不仅仅是一行和一列。命名似乎有问题。
通常,这种警卫人员是可疑的。算法代码应该是如此通用,以至于不需要分别处理这种特殊情况。

这是一个可能的实现,适用于printSquare(1, 5);printSquare(1, 1);情况。对于其他情况,您的说明还不够清楚。

public class Main {
    public static void main(final String... args) {
        printSquare(1, 5);
        printSquare(1, 1);
        //printSquare(2, 6);
        //printSquare(4, 4);
    }

    public static void printSquare(int startNum, int height) {
        for (int i = startNum; i < startNum + height; i++) {
            for (int j = i; j < height + i; j++) {
                System.out.print((j - 1) % height + 1);
            }
            System.out.println();
        }
        System.out.println();
    }
}


如果结束号不是仅由height而是由startNum + height - 1确定,则可能的解决方案如下所示:

    public static void printSquare(int startNum, int height) {
        for (int i = startNum; i < startNum + height; i++) {
            for (int j = 0; j < height; j++) {
                System.out.print((j + i - startNum) % (height) + startNum);
            }
            System.out.println();
        }
        System.out.println();
    }

08-04 03:14