在java中查找并返回数组元素

时间:2016-12-05 10:05:23

标签: java arrays

所以在过去的几个小时里,我一直在试图解决这个问题,但是我被卡住了。

我有一个数组,其中包含一个人姓名,年龄,身高(厘米)的列表。我想创建一个方法,我只使用人名作为参数,并在数组中搜索名称;如果没有匹配的名称,则返回null。

看起来像这样:

data = new data[50];
data[0] = new data("Dan", 23, 179);
data[1] = new data("David", 20, 180);
data[2] = new data("Sharon", 19, 162);
data[3] = new data("Jessica", 22, 160);
data[4] = new data("Nancy", 25, 164);
...
numberData = 30; // this is the number of people that are in this array so far

这是我到目前为止所尝试的......

public data findData(String name) {
   for (int i = 0; i < numberData; i++) {
        if (name == data[i]) {
            return data[i];
        } else {
            return null;
        }
    }
}

我知道这不对,但我似乎无法找到解决方案。有什么想法吗?

7 个答案:

答案 0 :(得分:0)

  1. 如果循环至少执行一次,则表示您缺少返回值
  2. ==比较引用,equals比较字符串。
  3. 返回null以防万一,数组中没有这样的元素。
  4. 班级名称应以大写字母开头。请写下Data而不是data
  5. 代码:

    public Data findData(String name) {
       for (Data d : data) {
            if (name.equals(d.getName())) {
                return d;
            } 
       }
       return null;
    }
    

    是您正在寻找的。在原始代码中,如果null元素不是0,则会返回name

    好的,以上是一个快速修复,现在有一些理论:

    数组中线性搜索的伪代码:

    • 遍历数组中的所有元素。如果与您正在寻找的匹配,请将其返回。
    • 如果未返回任何内容,请返回指示值(在我们的示例中为null)。

    在原始代码中查看第0个元素,您决定是返回该元素还是null。此外,如果循环至少没有运行一次,则没有返回语句。

答案 1 :(得分:0)

数组引用带有name参数的Data类,因此我们应该与name参数进行比较,而不是直接与数据引用进行比较,对于字符串比较,总是使用equals()方法。

public Data findData(String name) {
    for (int i = 0; i < numberData; i++) {
        if (name.equals(data[i].getName())) {
          return data[i];
        } 
    }
    return null;
}

答案 2 :(得分:0)

使用equals()比较字符串,
例如

if(name.equals(data[i].getName())) {
    statements...
}

答案 3 :(得分:0)

由于您要比较字符串,您必须使用 equals 方法。

以下是如何使用java 8的示例:

  public Data findData(Data[] datas, String name) {
    return Arrays.stream(datas).filter(data -> data.getName().equals(name)).findAny().orElse(null);
}

答案 4 :(得分:-1)

您应该使用equals()来比较字符串。 equals()检查字符串的实际内容,==检查对象引用是否相等。

另外,如上所述,将return null移到循环之外;

答案 5 :(得分:-1)

您可以使用以下代码。假设您的数据类将具有返回名称值的getName()方法。

public data findData(String name) {
 for (int i = 0; i < numberData; i++) {
     if (name.equals(data[i].getName())) {
         return data[i];
     }
 }
 return null;
}

答案 6 :(得分:-2)

将return null语句移出循环。 哦!是的,使用equals()方法而不是==