/ *这里是完整的问题:
编写一个名为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();
}