所以在过去的几个小时里,我一直在试图解决这个问题,但是我被卡住了。
我有一个数组,其中包含一个人姓名,年龄,身高(厘米)的列表。我想创建一个方法,我只使用人名作为参数,并在数组中搜索名称;如果没有匹配的名称,则返回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;
}
}
}
我知道这不对,但我似乎无法找到解决方案。有什么想法吗?
答案 0 :(得分:0)
==
比较引用,equals
比较字符串。null
以防万一,数组中没有这样的元素。Data
而不是data
。代码:
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()方法而不是==