我的java项目要求我创建一个对象(项目)数组,填充项目数组,然后创建一个主要方法,要求用户输入反映相应项目的项目代码。
我花了一段时间才弄明白,但我最后通过使用公共变量来“欺骗”,以避免传递/引用类之间的对象。
请帮我正确地将物品传回。
这是我的大多数方法的课程,包括插入和查找方法。
public class Catalog {
private Item[] itemlist;
private int size;
private int nextInsert;
public Item queriedItem;
public Catalog (int max) {
itemlist = new Item[max];
size = 0;
}
public void insert (Item item) {
itemlist[nextInsert] = item;
++nextInsert;
++size;
}
public Item find (int key) {
queriedItem = null;
for (int posn = 0; posn < size; ++posn) {
if (itemlist[posn].getKey() == key) queriedItem = itemlist[posn];
}{
return queriedItem;
}
}
}
这是我的主要课程:
import java.util.*;
public class Program {
public static void main (String[] args) {
Scanner kbd = new Scanner (System.in);
Catalog store;
int key = 1;
store = new Catalog (8);
store.insert(new Item(10, "food", 2.00));
store.insert(new Item(20, "drink", 1.00));
while (key != 0) {
System.out.printf("Item number (0 to quit) ?%n");
key = kbd.nextInt();
if (key == 0) {
System.out.printf("Exiting program now!");
System.exit(0);
}
store.find(key);
if (store.queriedItem != null) {
store.queriedItem.print();
}
else System.out.printf("No Item found for %d%n", key);
}
}
}
谢谢,我感谢帮助!!!!!!
答案 0 :(得分:11)
store.find(key);
会返回您应该使用的Item
,并从Catalog
public Item find (int key) {
Item queriedItem = null;
//....
}
Item searched = store.find(key);
if (searched != null)
searched.print();
else
System.out.printf("No Item found for %d%n", key);
答案 1 :(得分:9)
完全删除您对queriedItem
的使用,只需从find
返回该项:替换
store.find(key);
if (store.queriedItem != null){store.queriedItem.print();}else System.out.printf("No Item found for %d%n", key);
使用
Item foundItem = store.find(key);
if (foundItem != null) {
foundItem.print();
} else System.out.printf("No Item found for %d%n", key);
答案 2 :(得分:-1)
嗯,这里有一些建议(根据自己的判断选择复杂性,但强烈推荐所有这些):
UserInputProvider
界面,以便您可以轻松更改读取用户输入的方式,而不会影响其他任何内容。例如,使用ConsoleInputProvider
类实现它。Item
)。List
或Map
,请设计自己的实现,将数据结构和处理与Catalog
所代表的逻辑分开(即Catalog
反过来将委托给Map.get
或您的数据结构实现的等效方法UserInputProvider
(它不应该知道它正在使用的确切实现)来获取用户输入,验证和转换根据需要调用数据,调用Catalog
以找到适当的Item
,然后(类似于输入接口)将结果(它获得的确切数据,而不是某些字符串或类似数据)发送到某个实现SearchResultView
接口决定如何显示此结果(在这种情况下,它将是一个基于控制台的实现,它打印一个表示它所获得的Item
的字符串。)
通常,您可以达到的解耦水平越高,您的计划就越好。
Single Responsibility Principle 指出:“每个班级都应该承担一项责任,而且责任应该由班级完全封装”。对于方法也是如此:它们应该只有一个明确定义的任务,没有任何副作用。