我是java新手,所以如果我犯了一个非常简单的错误,请原谅我。我正在尝试在基于文本的冒险游戏中购物。我创建了一个数组shop Items
,它将物品列表存储为商店可以出售的字符串。这是我用于用户在游戏中进行购买的方法的一部分。
String request = s.nextLine().toLowerCase();
for (int i = 0 ; i < shopItems.length ; i++)
{
if(request.equalsIgnoreCase(shopItems[i]))
{
System.out.println("We have this item in stock! That will be " + itemPrice[i] + " gold, "
+ "would you like to purchase this item?");
String command2 = s.nextLine().toLowerCase();
if(command2.equals("yes") || command2.equals("y"))
{
if (savings >= itemPrice[i])
{
System.out.println("Congratulations! You have purchased " + shopItems[i] + ". Thank you "
+ "for your business.");
savings = savings - itemPrice[i];
inv.add(shopItems[i]);
magicShopPurchase();
}
else if (savings < itemPrice[i])
{
System.out.println("I'm sorry, you don't have enough gold to purchase this item! Try "
+ "again when you have enough!");
}
}
}
else if(request.equals("leave"))
{
System.out.println("Thank you! Please come again soon!");
inMagicShop();
}
else
{
System.out.println("I'm sorry, we don't have any of those in stock at the moment. Would you "
+ "like to purchase a different item?");
String command2 = s.nextLine().toLowerCase();
if(command2.equals("yes") || command2.equals("y"))
{
magicShopPurchase();
}
else if(command2.equals("no") || command2.equals("n"))
{
System.out.println("Thank you! Please come again soon!");
inMagicShop();
}
else
{
System.out.println("Haha, you kiss your mother with that mouth? Come back some other time!");
inMagicShop();
}
}
}
我试图将扫描仪输入与shopItems进行比较,以检查用户想要购买的商品是否在商店中可用,但它无法识别shopItems中的任何元素。我用这种方法有什么不对吗/哪里有错吗?这是我在这里的第一个帖子,如果我遗漏了任何重要的东西,请原谅我。
编辑
首先是我调用将元素存储到shop Items
中的方法。
try {
itemList = new String(Files.readAllBytes(Paths.get("C:\\Users\\gravy_000\\Desktop\\Software Development 1\\GameProject\\src\\hallSim\\magicitems.txt")));
read(itemList);
} catch (IOException e) {
e.printStackTrace();
}
其次是我用来读取文本文件并将其存储到shopItems中的方法。
public static void read(String shopList) {
shopItems = shopList.split("\\r?\\n");
}
这是Dropbox中文本文件的链接https://www.dropbox.com/s/rbfsr1fj2yzus1q/magicitems.txt?dl=0
问题是您告诉用户没有找到该项目,第一次request.equalsIgnoreCase(shop Items[i])
返回false,当请求
不存在时不返回。
因此,您应该用这样或等效的代码替换代码:
String request = s.nextLine().toLowerCase();
if(request.equals("leave")) {
//leave
} else {
boolean isItemInStock = false;
for (int i = 0 ; i < shopItems.length ; i++) {
if(request.equalsIgnoreCase(shopItems[i])) {
isItemInStock = true;
break;
}
}
if(isItemInStock) {
System.out.println("We have this item in stock! That will be " + itemPrice[i] + " gold, "
+ "would you like to purchase this item?");
//...
} else {
System.out.println("I'm sorry, we don't have any of those in stock at the moment. Would you "
+ "like to purchase a different item?");
//...
}
}
注意if/else语句如何处理请求的内容,它位于主循环之外。
对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?
问题内容: 我必须在 while 循环中显示Scanner输入:用户必须插入输入,直到他写下“ quit”为止。因此,我必须验证每个输入以检查他是否写出“ quit”。我怎样才能做到这一点? 这行不通。如何验证每个用户的输入? 问题答案: 问题是nextLine() “使该扫描程序前进到当前行之外”。因此,当您调用该条件并且不保存返回值时,您将丢失用户输入的那一行。对第3行的调用返回另一行。 您可
问题内容: 问题答案: 您可以尝试这样的事情: 除非我误解你,否则这似乎是很基本的东西
这是一项学校作业,我已经尝试太久了。我知道如何打印字符总数(如代码所示)。例如,输入和将导致。如何打印或每个名称的长度?
我正在制作一个地下城探索类型的游戏,用户可以输入输入作为一个移动每回合(选择一个方向移动)。然而,我遇到了一个问题与采取扫描仪输入。当我测试我的方法一次,它是正确的,然而,当我把它进入一个while循环,以便我可以从玩家的每一个回合,我得到一个新的移动,在第一次输入后,我得到了一个错误。我不明白为什么我会得到这个错误,因为它不应该每次运行时都扫描新的输入吗?谢谢你的洞察力。 错误如下: 下面是有问