我的java项目要求我创建一个对象(项)数组,填充项数组,然后创建一个main方法,该方法要求用户输入返回相应项的项代码。
我花了一段时间才弄明白,但我最终通过使用公共变量来避免在类之间passing/referencing对象而“作弊”。
请帮助我正确地传递回对象。
这个类包含了我的大多数方法,包括、insert、和find方法。
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);
}
}
}
谢谢我感谢你的帮助!
发布于 2013-05-06 22:50:39
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);
发布于 2013-05-06 22:51:23
完全删除您对queriedItem
的使用,只需从find
:Replace返回该项
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);
发布于 2013-05-06 23:30:07
好吧,这里有一些建议(你自己选择复杂性,但所有这些都是强烈推荐的):
UserInputProvider
界面,这样你就可以轻松地更改用户输入的读取方式,而不会影响其他任何东西。例如,使用ConsoleInputProvider
类来实现它。一般来说,对于不是纯域对象的所有东西,都要尝试使用接口(在这里,你唯一拥有的接口可能是Item
).List
或Map
,设计你自己的实现,将数据结构和处理从Catalog
表示的逻辑中分离出来(例如,Catalog
将委托给例如Map.get
或数据结构的等效方法) main基本上应该只有ApplicationFactory (或IoC框架)来构建和初始化你的应用程序。调用UserInputProvider
(它应该不知道它正在使用的确切实现)以获取用户输入,根据需要验证和转换数据,调用Catalog
以找到适当的Item
,然后(类似于输入接口)将结果(它获得的确切数据,而不是某个字符串或类似内容)发送到SearchResultView
接口的某个实现,该接口决定如何显示该结果(在本例中,它将是一个基于控制台的实现,该实现打印一个表示它获得的Item
的字符串)。
通常,您可以实现的解耦级别越高,您的程序就会越好。
声明:“每个类都应该有一个单独的责任,并且这个责任应该完全由类封装”。对于方法也是如此:它们应该有且只有一个定义良好的任务,没有任何副作用。
https://stackoverflow.com/questions/16401228
复制相似问题