【问题标题】:arrays and objects efficiency数组和对象效率
【发布时间】:2013-12-04 01:06:49
【问题描述】:

测试类代码(我的编译器错误发生的地方)无法弄清楚如何让它与 INT 类型的东西一起工作,我有 3 个其他类似的方法,所有的字符串都可以工作,但我知道这不是它的方式应该用int,任何指导都会很棒!

【问题讨论】:

  • 这个问题有问题。您在问两个不同的问题(关于 for 循环和一些模糊的编译器错误)。您没有解释 for 循环有什么问题以及为什么应该更改它,并且您没有向我们提供有关编译器错误的详细信息。我们需要更多详细信息才能为您提供帮助。
  • 你需要循环遍历数组,除非你想要一堆 if 语句来检查每个索引
  • 使用HashMap!不是数组
  • @JosiahHester 我只能为此使用数组和对象。
  • @nhgrif 我可以坚持使用 for 循环,但是没有它还有另一种方法可以做到这一点,我只是好奇,但更重要的是尝试获取提供给的代码的第二部分与第一个工作并处理整个事情,如果有帮助,我会添加一些更多的见解。谢谢

标签: java arrays object compiler-errors


【解决方案1】:

这可能比常规的for 循环略好:

String message = "";
for(Book book : arrayOfBooks) {
    if(inventoryNumberSearched == book.getInventoryNumber() {
        message = message + book.toString()
    }
}

但是,重要的是要注意,您不能保证 for each 循环遍历数组的顺序,所以如果 book.toString() 字符串附加到消息的顺序很重要,您可能不应该使用这个。


至于你的编译器错误,这是有问题的:

message = Book.findBookByInventoryNumber(theBooks, searchInventoryNumber);

因为您的 findBookByInventoryNumber() 方法是 void 返回类型(并且您正试图将其发送到字符串变量中)。

您需要将方法的返回类型更改为String,并从中返回一个字符串。

从你原来的方法:

public static String findBookByInventoryNumber(Book[] arrayOfBooks, int inventoryNumberSearched) 
{
    String message = "";
    for(int i = 0; i < getNumberOfBooks(); i++) {
        if(inventoryNumberSearched == arrayOfBooks[i].getInventoryNumber()) {
           message = message + arrayOfBooks[i].toString();
        }//end if
    }//end for
    return message;
}//end findByInventory

【讨论】:

  • 不幸的是顺序很重要,没问题,我会坚持使用 for 循环,如果它有效,我只是想让它看起来更干净一些。但是编译器错误仍然使我无法查看是否可以使用库存编号条目进行搜索。
  • 没有人能猜到你的编译器错误。您必须将其发布在您原来的问题中。
  • 不能保证订单? JLS specification for the enhanced for loop 表示在数组上,它相当于传统的 for 循环,从 0 开始并以 1 为增量迭代到数组的长度。迭代顺序是明确定义和保证的(假设您的 JVM 遵循规范)。
【解决方案2】:

由于您是通过库存编号查找 Book 对象,因此您应该使用 Map 结构而不是 Array。使用HashMap&lt;int, Book&gt;:

public static void findBookByInventoryNumber(HashMap<int, Book> mapOfBooks, int inventoryNumberSearched)
{
    return mapOfBooks.get(inventoryNumberSearched);
}

【讨论】:

    猜你喜欢
    • 2018-03-01
    • 2011-04-19
    • 1970-01-01
    • 2013-06-22
    • 2011-06-05
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多