Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中查找并返回数组的元素_Java_Arrays - Fatal编程技术网

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

在java中查找并返回数组的元素,java,arrays,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", 1

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

我有一个数组,其中列出了一个人的姓名、年龄、身高(以厘米为单位)。我想创建一个方法,其中我只使用人名作为参数,并在数组中搜索人名;如果没有匹配的名称,则返回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;
        }
    }
}
公共数据findData(字符串名称){
对于(int i=0;i

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

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

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

而且,如上所述,将
返回null
移动到循环之外

  • 如果循环至少不执行一次,则缺少返回值
  • =
    比较引用,
    equals
    比较字符串
  • 返回
    null
    以防万一,数组中没有这样的元素
  • 类名应以大写字母开头。请写
    数据
    而不是
    数据
  • 代码:

    这就是你要找的。在原始代码中,如果
    0
    th元素不是
    name
    ,则返回
    null

    好的,上面是一个快速解决方案,现在是一些理论:

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

    • 循环遍历数组中的所有元素。如果有任何与您要查找的匹配项,请将其返回
    • 如果未返回任何内容,则返回指示值(
      null

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

    数组正在使用name参数引用
    数据
    类,因此我们应该使用name参数进行比较,而不是直接使用数据引用进行比较,对于字符串比较,始终使用方法

    公共数据findData(字符串名称){
    对于(int i=0;i
    您可以使用以下代码。假设您的数据类将具有返回名称值的getName()方法

    public data findData(String name) {
     for (int i = 0; i < numberData; i++) {
         if (name.equals(data[i].getName())) {
             return data[i];
         }
     }
     return null;
    }
    
    公共数据findData(字符串名称){
    对于(int i=0;i
    使用
    equals()
    比较字符串,
    e、 g


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

    下面是一个如何使用java 8的示例:

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

    name.equals(data[i])-参考:请显示您的
    数据
    类。此外,您通常会使用大写字母来调用类。最后,当您有一个名为
    data
    的数组和一个名为
    data
    的类时,这是非常容易误导的。您应该使用数组的属性
    length
    ,或者使用
    numberData
    变量。
    public data findData(String name) {
     for (int i = 0; i < numberData; i++) {
         if (name.equals(data[i].getName())) {
             return data[i];
         }
     }
     return null;
    }
    
    if(name.equals(data[i].getName())) {
        statements...
    }
    
      public Data findData(Data[] datas, String name) {
        return Arrays.stream(datas).filter(data -> data.getName().equals(name)).findAny().orElse(null);
    }