首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于Java编程的建议

关于Java编程的建议
EN

Stack Overflow用户
提问于 2013-05-06 22:45:03
回答 3查看 457关注 0票数 16

我的java项目要求我创建一个对象(项)数组,填充项数组,然后创建一个main方法,该方法要求用户输入返回相应项的项代码。

我花了一段时间才弄明白,但我最终通过使用公共变量来避免在类之间passing/referencing对象而“作弊”。

请帮助我正确地传递回对象。

这个类包含了我的大多数方法,包括、insert、find方法。

代码语言:javascript
复制
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;
        }
    }
}

这是我的主类:

代码语言:javascript
复制
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);

        }
    }
}

谢谢我感谢你的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-06 22:50:39

store.find(key);返回您应该使用的Item,并从Catalog中删除公共字段

代码语言:javascript
复制
public Item find (int key) {
   Item queriedItem = null;
   //....
}

代码语言:javascript
复制
Item searched = store.find(key);

if (searched != null)
   searched.print();
else 
   System.out.printf("No Item    found for %d%n", key);
票数 11
EN

Stack Overflow用户

发布于 2013-05-06 22:51:23

完全删除您对queriedItem的使用,只需从find:Replace返回该项

代码语言:javascript
复制
        store.find(key);

    if (store.queriedItem != null){store.queriedItem.print();}else System.out.printf("No Item found for %d%n", key);

使用

代码语言:javascript
复制
Item foundItem = store.find(key);
if (foundItem != null) {
   foundItem.print();
} else System.out.printf("No Item found for %d%n", key);
票数 9
EN

Stack Overflow用户

发布于 2013-05-06 23:30:07

好吧,这里有一些建议(你自己选择复杂性,但所有这些都是强烈推荐的):

  • Research ,例如。或者XML。您可以使用配置文件中的值填充数组,以获得代码中文字的更大flexibility.
  • Use常量(它们是necessary).
  • Create an ApplicationFactory,它会为您初始化整个应用程序。
  • 创建了一个UserInputProvider界面,这样你就可以轻松地更改用户输入的读取方式,而不会影响其他任何东西。例如,使用ConsoleInputProvider类来实现它。一般来说,对于不是纯域对象的所有东西,都要尝试使用接口(在这里,你唯一拥有的接口可能是Item).
  • Try,以使你的方法尽可能简短。
  • )
  • 如果你不被允许欺骗和使用ListMap,设计你自己的实现,将数据结构和处理从Catalog表示的逻辑中分离出来(例如,Catalog将委托给例如Map.get或数据结构的等效方法)

main基本上应该只有ApplicationFactory (或IoC框架)来构建和初始化你的应用程序。调用UserInputProvider (它应该不知道它正在使用的确切实现)以获取用户输入,根据需要验证和转换数据,调用Catalog以找到适当的Item,然后(类似于输入接口)将结果(它获得的确切数据,而不是某个字符串或类似内容)发送到SearchResultView接口的某个实现,该接口决定如何显示该结果(在本例中,它将是一个基于控制台的实现,该实现打印一个表示它获得的Item的字符串)。

通常,您可以实现的解耦级别越高,您的程序就会越好。

声明:“每个类都应该有一个单独的责任,并且这个责任应该完全由类封装”。对于方法也是如此:它们应该有且只有一个定义良好的任务,没有任何副作用。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16401228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档