【问题标题】:Accessing the index position of an object within an Array访问数组中对象的索引位置
【发布时间】:2014-06-06 10:54:49
【问题描述】:

您好,我想知道如何访问数组中对象的索引位置。我有一个搜索方法来搜索我想要的对象,然后一旦我有了这个我希望能够检索它的索引位置。我的搜索方法如下:

public megs find(String lName)      // find specified value
{
  int j;
  int location;
  for(j=0; j<nElems; j++){          // for each element
     if(a[j].getLast().equals(lName))       // found item?
        location=j;
     break;                 // exit loop before end
  }
  if(j==nElems)             // gone to end?
     return null;               // yes, can’t find it
   else
     return a[j];               // no, found it

  } // end find

我尝试过使用 for 循环并返回 j 的单独方法,但它总是返回 0。

public static int get(String sk) {

  int j;
  for(j=0; j<nElems; j++)
     if(a[j].equals(sk))
       return j;   
   }

【问题讨论】:

  • 既然可以使用a.length,为什么还要维护一个单独的长度属性?您是否检查过数组中的第一个元素是否总是是您要查找的元素(如果这不是预期的行为,可能暗示代码中其他地方的错误)?

标签: java arrays object indexing


【解决方案1】:

至少这里的代码肯定是错误的:

for(j=0; j<nElems; j++){          // for each element
 if(a[j].getLast().equals(lName))       // found item?
    location=j;
 break;                 // exit loop before end
}

break总是被执行,你应该在这里使用它:

for(j=0; j<nElems; j++){          // for each element
 if(a[j].getLast().equals(lName)) {       // found item?
    location=j;
    break;                 // exit loop before end
 }
}

【讨论】:

  • 这是为什么你应该总是在循环和条件句中使用大括号的一个典型例子。
【解决方案2】:
public class java1 {

static String a[]={"ak","jk","kl"};

public static int get(String sk){
    int j;
    for(j=0;j<3;j++){
        if(a[j].equals(sk)){
            return j;
        }
    }

    return -1;

}

public static void main(String[] args) {
    int x=get("jk");
    System.out.println(x);
}
}

【讨论】:

  • 仅当a 的长度不变时。
【解决方案3】:
public class java1 {

public static int get(String sk,String a[],int n){
    int j;
    for(j=0;j<n;j++){
        if(a[j].equals(sk)){
            return j;
        }
    }

    return -1;

}

public static void main(String[] args) {
    String a[]={"ak","jk","kl"};
    int x=get("jk",a,3);
    System.out.println(x);
}
}

【讨论】:

  • 您可以将数组和变化的长度作为参数传递。
  • 数组本身总是知道它有多大,这就是为什么所有数组对象都有一个公共的length属性。使用(在这种情况下)a.length 作为循环上限将总是比尝试手动跟踪大小更可靠。
  • 我不是提问者——我只是想推动你改进你的答案。您可能还想考虑仅代码的答案往往不会得到支持。 (简明扼要地)解释您的代码在做什么,因为虽然它对您和我来说可能很明显,但对于来自 Google 的其他读者来说并不一定很明显。
  • 我接受这一点。以后我会牢记这一点。
猜你喜欢
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2016-09-18
  • 1970-01-01
相关资源
最近更新 更多