Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态设置printf格式字符串中的字段宽度_Java_Format - Fatal编程技术网

Java 动态设置printf格式字符串中的字段宽度

Java 动态设置printf格式字符串中的字段宽度,java,format,Java,Format,我正在试着打印一张8字谜游戏的表格 我知道如何使用打印格式,即printf%2s。。等等,但我不确定如何根据正在播放的棋盘的大小(可能是3x3、5x5等)允许此更改 我可以通过编码获得最大数量的长度: String.valueOf(Side*Side - 1).length() 并将其存储在一个int中。然后如何获得该int来替换上面printf示例中的2 有更好的方法吗?谢谢。要将整数作为格式中的字段长度,只需将其作为字符串的一部分连接起来: int maxWidth = String.va

我正在试着打印一张8字谜游戏的表格

我知道如何使用打印格式,即printf%2s。。等等,但我不确定如何根据正在播放的棋盘的大小(可能是3x3、5x5等)允许此更改

我可以通过编码获得最大数量的长度:

String.valueOf(Side*Side - 1).length()
并将其存储在一个int中。然后如何获得该int来替换上面printf示例中的2


有更好的方法吗?谢谢。

要将整数作为格式中的字段长度,只需将其作为字符串的一部分连接起来:

int maxWidth = String.valueOf(Side*Side - 1).length();
printf( "%" + maxWidth + "s", .... );

格式化字符串与任何其他字符串一样。

您需要的是动态构造一个模板字符串,并将所有内容放入其中。例如,对于3x3板,您可能需要模板%n\t%n\t%n\n%n\t%n\t%n\n%n\t%n\t%n,如果提供9个数字输入,该模板将在控制台上打印为3x3网格。要构造模板,请执行以下操作:

public String makeTemplate(size){
    StringBuilder builder = new StringBuilder();
    for(int i = 0;i < size;i++){
        for(int i = 0;i < size-1;i++){
            builder.append("%n\t");
        }
        builder.append("%n\n");
    }
    return builder.toString();
}

您是否尝试过动态构造模板字符串?这将为输出提供合适的模板。有更好的方法吗?当你说“更好”时,你在寻找什么?事实证明,我不需要根据电路板的输入大小更改表格表示法-要求我使用%3s格式化电路板。还是一件值得学习的事情。“你能澄清一下你的意思吗,@DavisBroda?”。我的意思是更简洁、清晰、高效。我在考虑使用像StringBuilder这样的东西,我从来没有使用过,但也读过一点关于它的东西!因此,使用String.formattemplate,numbers,它将使用存储在numbers[]中的数字填充模板%n个位置。凉的我不知道你能做到,谢谢
public void someMethod(){
    int[] numbers = new int[9]; //fill in array with numbers
    String template = makeTemplate(3);
    String formatted = String.format(template,numbers);
    System.out.println(formatted);
}