在java中查找并返回数组的元素
所以,在过去的几个小时里,我一直试图自己解决这个问题,但我被卡住了 我有一个数组,其中列出了一个人的姓名、年龄、身高(以厘米为单位)。我想创建一个方法,其中我只使用人名作为参数,并在数组中搜索人名;如果没有匹配的名称,则返回null 看起来像这样:在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
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);
}