我是java新手,刚刚在uni完成编程基础知识,所以我很欣赏任何答案的详尽解释。谢谢。顺便说一下,我使用BlueJ作为我大学培训的一部分,这可能是相关的。
无论如何,这是问题;我为我的一个任务做了一个文本冒险,它是非常程序化设计的,所以我决定将它改造成一个更面向对象的程序。我想你需要知道的只有4级' (遗漏了一些不重要的位,否则这将是页面长,但如果你认为它们很重要,请告诉我);
库存
static room room;
public inventory(room room)
{
this.room = room;
}
public static room getRoom()
{
return room;
}
室
ArrayList <object> objects = new ArrayList <object>();
public ArrayList getobjects()
{
return objects;
}
对象
ArrayList<String> names = new ArrayList<String>();
public ArrayList getNames()
{
return names;
}
textparse(textparse有一个textparse方法)
public static void textparse(String line)
{
if (line.indexOf(" ") != -1){
int space = line.indexOf(" ");
noun = line.substring(space + 1, line.length()).toLowerCase();
verb = line.substring(0, space).toLowerCase();
}
else
verb = line;
verbparse();
}
这是问题;房间里面有一个物体的arraylist,对象有一个名字的arraylist,玩家可以调用它们。这是我的代码,试图检查textparse类先前识别的名词是否与任何对象的名称匹配。顺便说一下,这是在textparse类中;
public static object nounparse()
{
for (int counter = 0; counter < inventory.getRoom().getobjects().size(); counter++)
{
object current = inventory.getRoom().getobjects().get(counter);
if (current.getNames().contains(noun)){
return current;
}
}
return null;
}
它返回错误'不兼容的类型:java.lang.Object无法转换为对象'引用此行
object current = inventory.getRoom().getobjects().get(counter);
我不确定为什么它认为这是一个Object的输出,但是由于我在该领域的经验有限,我甚至不确定对象是什么,除了类的实例的一般分类器。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:0)
您的错误的具体来源是向下倾斜。 inventory.getRoom().getobjects().get(counter)
的返回类型似乎为ArrayList。 Java中的ArrayList
类型为Object
,但您的小写object
似乎是一个新的类定义,它不是ArrayList
的超类或接口。您可以将其称为ArrayList
或List
或Collection
或Object
(请注意大小写),但您尝试为其指定object
类型
有关使用超类类型的更多信息,请搜索有关Java继承的教程。
如果您的对象类型确实与ArrayList
兼容,则可以输入object
类型,例如:
object current = (object) inventory.getRoom().getobjects().get(counter);
然而,我严重怀疑在这种情况下会起作用,几乎肯定不是你想要的;除非你知道自己在做什么,否则不要进行类型转换。 :)我只为你提供这方面的更多关于类型转换的研究,以便更好地理解它。
此外,您需要快速查看java coding conventions关于类名的大小写以及将camelCase用于变量和方法名称;它会让你的代码更具可读性。
答案 1 :(得分:0)
您缺少通用参数。如果这是您期望的行为,则getRooms()
应该返回ArrayList<object>
。
此外,您应该将object
重命名为其他内容,例如Thing
和Item
,否则可能会导致混淆,拼写错误,读取错误(即您可能以后认为自己写了 O bject not o bject)等。建议所有类名都写在 Big Camel Case 中。
Java Generics:Java Generics Tutorial at Oracle.com
Java命名约定:(懒得找一个,看@DanielWiddis的答案)