【问题标题】:Java object returns null outside of for loopJava 对象在 for 循环之外返回 null
【发布时间】:2014-05-26 19:15:35
【问题描述】:
public Account [] search(double bal){

boolean flag=false;
Account [] tmp = new Account[account.length];

//Loop until the end of the account array.
for(int i=0;i<account.length && account[i]!=null;i++)
{
if(account[i].getBal()==bal)
   {
           tmp[i]=account[i];
           System.out.println(tmp[i]);  //here returns correct value
           flag=true;
       }
   }


   System.out.println(tmp[0]);  //here returns null

   return tmp;
}

嗨。我对 Java 很陌生。

System.out.println(tmp[i]) 返回正确的 Account obj 并打印值。

但是为什么 System.out.println(tmp[0]) 在 for 循环之外返回 null 呢?

【问题讨论】:

  • 拿出笔和纸,运行你的程序,标记每个对象的值。
  • 或者,使用调试器。

标签: java arrays


【解决方案1】:

如果第一个条件为假,那么temp[0] 将始终为空。

 if(account[i].getBal()==bal)
   {
           tmp[i]=account[i];
           System.out.println(tmp[i]);  //here returns correct value
           flag=true;
       }

因为在这段代码中,如果只有第一个条件正确,它将进入"if"条件,然后将account[i]的值赋给temp[0]。否则它将永远为空。

【讨论】:

    【解决方案2】:

    如果我理解你的问题,你只是有点困惑 -

    public Account[] search(double bal) {
      int flag = 0;
      Account[] tmp = new Account[account.length];
    
      // Loop until the end of the account array.
      for (int i = 0; i < account.length && account[i] != null; i++) {
        tmp[i] = account[i]; // I assume you wanted to "copy" account.
        if (account[i].getBal() == bal) {
          System.out.println(tmp[i]); // here returns correct
                                      // value
          flag = i;
        }
      }
    
      /* becasue 0 is not i */
      System.out.println(tmp[flag]); // use "flag"
    
      // Honestly, you should use -
      // http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int%29
      // System.arraycopy(account, 0, tmp, 0, account.length);
      return tmp;
    }
    

    【讨论】:

      【解决方案3】:

          if(account[i].getBal()==bal)
         {
                 tmp[i]=account[i];
                 System.out.println(tmp[i]);  //here returns correct value
                 flag=true;
             }
         }
      

      如果计数器 i == 0 时条件为假,则 tmp[0] 最终将为空。您可以将 ArrayList 与 tmp 变量一起使用,然后将其转换为 Account 数组,如下所示:

      public Account [] search(double bal){
      
      
      ArrayList<Account> tmp = new ArrayList<Account>();
      
      for(int i=0;i<account.length && account[i]!=null;i++)
      {
      if(account[i].getBal()==bal)
         {
                 tmp.add(account[i]);
                 System.out.println(tmp[i]);  //here returns correct value
             }
         }
      
         Account resultArray[] = new Account[tmp.size()];
         resultArray = tmp.toArray(resultArray);
      
         return resultArray;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-08-14
        • 2016-02-25
        • 2016-08-23
        • 2021-09-10
        • 2021-01-06
        • 2021-10-17
        • 2016-09-03
        • 2020-02-25
        • 1970-01-01
        相关资源
        最近更新 更多