【问题标题】:how to check if a non primitive java array has a certain element [duplicate]如何检查非原始Java数组是否具有某个元素[重复]
【发布时间】:2019-08-16 05:02:25
【问题描述】:

我正在尝试搜索一个 java 数组,其中包含一个名为 Tickets 的类的值有一个特定的票证对象...通常用于原始数据类型的 if 语句的 for 循环不起作用

我已经尝试了下面的东西

public  Ticket retrieve(String ticketID){
    Ticket retur;
    for(int i=0;i<numTickets;i++){
        if (tickets[i].equals(ticketID)){
        retur = tickets[i];
        }
    } 
    return retur;
}

我收到错误返回可能未初始化。

【问题讨论】:

  • 如果numTickets0 或者没有一张票等于ticketID,你的应用会发生什么?然后函数将返回未初始化的值。简单的解决方法是添加retur = null,但您必须考虑其余代码(我不知道)。
  • 要立即修复,请在声明此变量时使用Ticket retur = null
  • 当使用一个变量时,编译器检查它是否已经被初始化,或者更好的是,如果它可能没有被初始化(在代码可能采用的任何明显分支上)-如果是这样,您将收到该消息。这与是否使用“原始数据”无关。这是一个很好的迹象,表明实现的逻辑缺少/错误(这里缺少返回的内容或未找到的内容)
  • 好的,我想如果你能帮助我如何在非原始值数组中搜索某个对象会有所帮助

标签: java arrays search


【解决方案1】:

您必须初始化Ticket 对象,因为如果您的数组没有任何具有相同ticketId 的对象,那么您的Ticket oibject 将保持未初始化状态。您的比较也是错误的。您必须将 ticketIdTicket 对象的某些字段进行比较。喜欢tickets[i].getId().equals(ticketID)

public Ticket retrieve(String ticketID){
        for(int i=0;i<numTickets;i++){
            if (tickets[i].equals(ticketID)){
               return tickets[i];//If tickets[i] is a `String` object then you have to convert it into `Ticket` object before returning. Or if `tickets[i]` is a `Ticket` object then you comparison is wrong.
            }
        } 
        return null;
 }

【讨论】:

  • 只是一个注释:但这正在改变实际的逻辑:返回第一个找到的元素而不是最后一个(不知道这是否是 OP 故意的)。而且,有疑问,只能假设ticketsTicket[],因此将其与String 进行比较应该会失败,再次假设equals 的实现遵循equals 合同
猜你喜欢
  • 2016-03-12
  • 2013-02-20
  • 2016-09-09
  • 2017-12-19
  • 2016-10-25
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多