我正在尝试用Java制作基于文本的游戏。我提出了一个非常基本的文本清单,并提供了几种方法:一种是在找到新项目时添加新项目,一种是在使用时将其删除,以及一种打开清单本身的方法。我曾经将这些项目称为字符串,但是我还需要一个描述和一个“找到的”布尔值来触发一些选择,因此我决定将它们转换为对象。
对于上下文:我的库存是一个ArrayList,因为我需要一个动态解决方案来随时随地添加潜在物品。
我的问题:当我尝试引用“ item”的名称时,我得到的是我创建的最后一个Item的值,而不是我放入“ addItem()”方法中的那个的值。
//My class, for reference:
public class Item {
static String name;
static String description;
static boolean isOwned = false;
public Item(String name, String description, boolean isOwned) {
this.name = name;
this.description = description;
this.isOwned = isOwned;
}
public static String getName() {
return name;
}
public static String getDescription() {
return description;
}
public static boolean isOwned(boolean owned) {
if (owned) {
isOwned = true;
} else if (!owned) {
isOwned = false;
}
return isOwned;
}
这是我为广告资源创建的方法:
public static void addItem(Item obj) {
inventory.add(Item.name);
if (!startScreen) { //This is to prevent the method from printing out an
//output in the start screen, while doing some background "addItem()" processes.
System.out.println("-------------------------------------------");
System.out.println("\n> You have a new item: " + Item.name + ".");
Item.isOwned(true);
}
}
public static void removeItem(Item obj) {
inventory.remove(Item.name);
System.out.println("-------------------------------------------\n");
System.out.println("> " + Item.name + " used.");
}
public static void openInventory() {
System.out.print("> Your inventory: |");
for (String item : inventory) {
System.out.print(" " + item + " | ");
}
System.out.println("-------------------------------------------\n");
System.out.println("> To use an item, please type the exact name."
+ "\n> Type 'X' to close the inventory.");
String interact = in.
if (interact.equals("x")) {
break;
}
}
}
现在,假设我创建了两个项目,但只想添加第一个项目:
static Item sealedLetter = new Item(
"Sealed Letter", //name
"A letter from a desperate man to his beloved. It holds many secrets.", //description
false); //'Found' State
static Item musicSheet = new Item(
"Music Sheet", //name
"A music sheet holding a melancholic melody in D minor. Someone might appreciate its gloomy tune.", //description
false); //'Found' State
addItem(sealedLetter);
由于某种原因,我的输出将是这样,并且仅与最后创建的项目有关:
“您有一个新项目:音乐单。”
正如您将看到的,我试图引用项目中的变量和方法中的单个对象,但这似乎不起作用。为库存中的每个物料创建一种方法显然既不实用也不有效,尽管可以解决此问题。我究竟做错了什么?我不是使用正确的参数来引用对象吗?
我敢肯定,我的这个问题可能会帮助一些希望实施比我的系统更好的系统的人-当然,如果我能使它工作!