首页 > 解决方案 > 如何为数组索引中的每个数字显示 XXX|XXX?- 爪哇

问题描述

所以我有 NIM 游戏程序。基本上,有四堆,两个玩家必须不断地从堆中取石子,直到其中一个输掉。现在我的桩在输出中看起来像这样。

板:[1、2、3、4]

但我需要修改它,让它看起来像这样

                        XXX|XXX
                XXX|XXX XXX|XXX
        XXX|XXX XXX|XXX XXX|XXX
XXX|XXX XXX|XXX XXX|XXX XXX|XXX

这是我的代码

System.out.print("");
    for(int i = 0; i<4; i++)
    {
        //System.out.println(i);
        for(int j = 0; j < numbers[i];j++)
        {
            //System.out.println(j);
            
            System.out.print(" XXX|XXX ");
            
            
            
        }
        
        System.out.println(" ");
        
    }
    

它打印这个

XXX|XXX

XXX|XXX XXX|XXX

XXX|XXX XXX|XXX XXX|XXX

XXX|XXX XXX|XXX XXX|XXX XXX|XXX

建议?

标签: java

解决方案


通过使用arrayandString.join()方法,您可以创建一个长度为 board 数组中最后一个数字的数组。这确保了输出中包含的所有字符串都具有相同的长度——没有丑陋的、意外的单字符偏移。然后,您可以遍历小于堆数组长度的数字,并检查该位置是否应该是空格或填充“XXX|XXX”

之后,您将拥有如下所示的数组:

{"       ","       ","       ","XXX|XXX"}
{"       ","       ","XXX|XXX","XXX|XXX"}
{"       ","XXX|XXX","XXX|XXX","XXX|XXX"}
{"XXX|XXX","XXX|XXX","XXX|XXX","XXX|XXX"}

int [] board = {1,2,3,4};

for (int i : board) {
    String[] pile = new String[board[board.length-1]];
    for (int x = 0; x < pile.length; x++) {
        if (x < pile.length-i) {
            pile[x] = "       ";
        } else {
            pile[x] = "XXX|XXX";
        }
    }
    String s = String.join(" ", pile);
    System.out.println(s);
}

输出:

                        XXX|XXX
                XXX|XXX XXX|XXX
        XXX|XXX XXX|XXX XXX|XXX
XXX|XXX XXX|XXX XXX|XXX XXX|XXX

这个循环也能够支持任何长度的板,只要板中的每个项目增加 1。


推荐阅读