麦当230 2022-10-25 13:33 采纳率: 50%
浏览 37
已结题

Java遇到以下问题

    我用以下代码想打印出一个矩形,但是实际效果如图所示,有谁知道是哪里不对吗?使用的是Java,jdk11,eclipse

img

    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条回答 默认 最新

  • a5156520 2022-10-25 14:01
    关注

    主要原因是一个中文字符的打印宽度和一个空格字符的打印宽度不一致,大致比例是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();
            }
            
        }
    
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计