写代码时要特别注意边界值和特殊情况。
题目描述:编写一个程序,模拟打印一个正方形的框。程序应该接受用户输入的正整数作为正方形的边长,并打印相应大小的正方形框。 请注意,内部为空白,外部是由 "*" 字符组成的框。
输入描述:输入只有一行,为正方形的边长 n。
输出描述:输出正方形组成的框。
输入示例:5
输出示例:
*****
* *
* *
* *
*****
题目要求重复的进行同一行为(5个字符的打印输出),可以想到用循环结构实现。写出基础代码。
import java.util.Scanner;
//n=5时输出正确,n=1时输出错误
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++){
System.out.print("*");
}
System.out.println();
for(int i=2;i<n;i++){
System.out.print("*");
for(int j=2;j<n;j++){
System.out.print(' ');
}
System.out.print("*");
System.out.println();
}
for(int i=0;i<n;i++){
System.out.print("*");
}
}
}
n>1时可以正确输出正方形,当n=1时,期待输出为:
*
实际输出为:
*
*
这就是没有考虑到边界值n=1的情况导致的错误。
对n=1的情况做特殊处理,修改代码为:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++){
System.out.print("*");
}
if(n>1){
System.out.println();
}
for(int i=2;i<n;i++){
System.out.print("*");
for(int j=2;j<n;j++){
System.out.print(' ');
}
System.out.print("*");
System.out.println();
}
if(n>1){
for(int i=0;i<n;i++){
System.out.print("*");
}
}
}
}
另解:输出值有两种情况,“*”和“ ”,根据字符在正方形中的位置选择输出,当位于正方形边线时输出“*”,当位于正方形内部时输出“ ”。由此逻辑关系写出代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
// 判断是否在边界位置,如果是,则打印 "*"
if (i == 0 || i == n - 1 || j == 0 || j == n - 1) {
System.out.print("*");
} else {
// 否则,打印空格
System.out.print(" ");
}
}
// 换行到下一行输出
System.out.println();
}
}
}