我用以下代码想打印出一个矩形,但是实际效果如图所示,有谁知道是哪里不对吗?使用的是Java,jdk11,eclipse
char map[][] = new char[18][32];
Scanner sc = new Scanner(System.in);
int x = 1, y = 1;
boolean finish = false;// 判断游戏是否结束
for (int i = 0; i < map.length; i++) {
if (i == 0 || i == 17) {
for (int j = 0; j < map[i].length; j++) {
map[i][j] = '墙';
}
} else {
map[i][0] = '墙';
map[i][31] = '墙';
}
}
主要原因是一个中文字符的打印宽度和一个空格字符的打印宽度不一致,大致比例是3个'墙'字符和4个空格字符的宽度相同,依照这一点,修改如下:
import java.util.Scanner;
public class CreateWall {
public static void main(String[] args) {
// TODO Auto-generated method stub
char map[][] = new char[18][32];
// Scanner sc = new Scanner(System.in);
int x = 1, y = 1;
boolean finish = false;// 判断游戏是否结束
// System.out.println("map.length="+map.length);
//System.out.println("墙 墙");
//System.out.println("墙墙墙墙墙");
//
for (int i = 0; i < map.length; i++) {
if (i == 0 || i == 17) {
for (int j = 0; j < map[i].length; j++) {
map[i][j] = '墙';
}
} else {//当不是第一行和最后一行的其他的行,第一列和最后一列为'墙'字符,其他列为空格
for(int j=0;j<map[i].length;j++) {
if(j==0||j==31) {
map[i][j] = '墙';
}else {
map[i][j]=' ';
}
}
}
}
for(int i=0;i<map.length;i++) {
for(int j=0;j<map[i].length;j++) {
if(map[i][j]!=' ') { //当不为空格,即为'墙'字符,则输出它
System.out.print(map[i][j]);
}else { //如果是空格,则每隔三个字符输出四个空格,以对齐三个中文字符
if(j%2==0) //在cmd下改为 j%2==0 ,在eclipse里面改为j%3==0
System.out.print(" ");
}
}
System.out.println();
}
}
}
因为一个汉字占2个空格的宽度
而.length属性只能获取里面到底有几个字符(是字符不是字节,所以一个汉字也是一个字符)