我已经找了至少一个小时了,但是没有结果。我正在编写一款基于文本的冒险游戏,并使用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