我可以格式化未知数量的字符串,逗号分隔,每行有三个字符串吗?



我已经找了至少一个小时了,但是没有结果。我正在编写一款基于文本的冒险游戏,并使用ArrayList存储我的库存。我目前正在制作一个"显示目录"。方法,该方法仅将库存打印到控制台。

public void displayInventory()  
{                   

StringBuilder result = new StringBuilder("Inventory: n");

String format = ("%s, %s, %s %n"); 

for (int i=0; i< inventory.size(); i++)
{

result.append(inventory.get(i));
}

//String result = String.join("," inventory);


System.out.format(format, result.toString());;
} 

现在,最初我的问题是弄清楚如何使用它与StringBuilder,但现在我有点下降。但是我遇到了一个问题,我将格式设置为三个字符串(来自库存的项目),以便打印到每行。在只用两个项目测试之后,我得到了下面的错误(这是有意义的)。

Inventory: 
Small BottleLarge Bottle, Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier '%s'
at java.base/java.util.Formatter.format(Formatter.java:2688)
at java.base/java.io.PrintStream.format(PrintStream.java:1209)
at wonderland/gameObjects.Player.displayInventory(Player.java:41)
at wonderland/gameObjects.Test.main(Test.java:19)

我是否需要设置某种检查,以查看玩家库存中是否有多个三个项目,如果没有,则有不同的打印语句/格式?是否有一种方法来格式化未知数量(或至少变化数量)的字符串?

玩家可以捡起三个道具,使用一个,然后再捡起另外两个。我需要某种方式来显示他们库存中可能存在的不同数量的物品。

我讨厌问关于SO的问题,因为它们几乎总是被声明为重复的,尽管没有相同的情况。所以我真的很犹豫,但我不能再忍受头部的创伤了。提前感谢您的任何和所有的帮助/回答。

使用你在评论中描述的String.join(),你会得到这个:

List<String> inventory = List.of(
"A", "B", "C", "D", "E", "F", "G", "H", "I",
"J", "K", "L", "M", "N", "O", "P", "Q");
public void displayInventory()  {                   
System.out.println("Inventory:");
for (int i = 0, size = inventory.size(); i < size; i += 3)
System.out.println(String.join(", ",
inventory.subList(i, Math.min(i + 3, size))));
} 

displayInentory();

输出:

Inventory:
A, B, C
D, E, F
G, H, I
J, K, L
M, N, O
P, Q

我是否需要设置某种检查,以查看玩家库存中是否有三个项目的多个,如果没有,则有不同的打印语句/格式?是否有一种方法来格式化未知数量(或至少变化数量)的字符串?

可以,或者使用另一个答案中描述的循环方法。这是因为PrintStream.format()不允许任何未使用的变量。

下面是对"检查[ing]是否有三个物品的倍数在玩家的物品清单中"的修改。通过操作格式字符串。

List inventory = List.of("Shovel", "Dirt", "Magazine", "Marble", "Orange", "Knife", "Popsicle");
StringBuilder format = new StringBuilder();
for(int i = 0; i < inventory.size(); i++) {
if(i == 0) {
// first item, prepend "Inventory:"
format.append("Inventory:%n%s");
} else if(i == inventory.size() -1) {
// last item, don't prepend or append
format.append("%s");
} else if(i % 3 == 2) {
// third item, append newline
format.append("%s%n");
} else if(i < inventory.size() -1) {
// 1st or 2nd item, append comma and space
format.append("%s, ");
}
}
System.out.println("Format: n" + format + "n");
System.out.format(format.toString(), inventory.toArray());;

输出:

Format: 
Inventory:%n%s%s, %s%n%s, %s, %s%n%s
Inventory:
ShovelDirt, Magazine
Marble, Orange, Knife
Popsicle

相关内容

最新更新