我的方法在Eclipse上遇到问题。我要求如果在名为catalog的数组中找到对象,则返回一个Country
对象,如果找不到,则返回null。我试图遍历目录并这样做。但是,java要求我在代码的for循环之外添加return语句。但是,当我在执行该方法时在for循环外添加return语句时,它将完全忽略for循环,而仅在for循环外返回该语句。
public Country findCountry(String countryname) {
for (int i = 0; i < catalogue.length; i++) {
if (catalogue[i].getName() == countryname) {
return catalogue[i];
} else {
return null;
}
}
}
编辑:在循环之前添加了foundCountry变量,并在循环之后返回了它。添加一个中断,并使用.equals()比较字符串。获取NullPointerException。
public Country findCountry(String countryname) {
Country foundCountry = null;
for (int i = 0; i < catalogue.length; i++) {
if (catalogue[i].getName().equals(countryname)) {
foundCountry = catalogue[i];
break;
}
}
return foundCountry;
}
答案 0 :(得分:1)
更改
catalogue[i].getName() == countryname
到
catalogue[i].getName().equals(countryname)
也不要return null
部分中的else
。当循环完成但没有找到类似内容时执行此操作:
public Country findCountry(String countryname) {
for (int i = 0; i < catalogue.length; i++) {
if (catalogue[i].getName().equals(countryname)) {
return catalogue[i];
}
}
return null;
}
请注意,它不是空证明。
答案 1 :(得分:1)
具有流使用率(需要Java 8或更高版本)并检查catalogue
的另一个版本不是null
:
public Country findCountry(String countryName) {
if (catalogue == null) {
return null;
}
return Arrays.stream(catalogue)
.filter(country -> country.getName().equals(countryName))
.findAny()
.orElse(null);
}
答案 2 :(得分:0)
删除
else {
return null;
}
并将其放在您的for循环中
return null;
如果国家/地区不在目录中的第一个元素,则您的代码返回null。它不会遍历它。
答案 3 :(得分:0)
您可以使用null初始化返回值,并且仅在循环中找到它时才设置它:
public Country findCountry(String countryname) {
// initialize a Country with null
Country foundCountry = null;
// try to find it
for (int i = 0; i < catalogue.length; i++) {
if (catalogue[i].getName().equals(countryname)) {
// set it if found
foundCountry = catalogue[i];
}
}
// if not found, this returns null
return foundCountry;
}
答案 4 :(得分:0)
@Widget({
typeName: 'widget-container',
displayName: '',
type: 'parent',
settings: []
})
@Component({
selector: 'widget-container',
templateUrl: "widget-container.component.html",
encapsulation: ViewEncapsulation.None
})
export class WidgetContainerComponent {
@ViewChild(ChildReferenceDirective, { read: ViewContainerRef }) childRef;
get childReference(): ViewContainerRef {
return this.childRef;
}
private data: ObjectInterface = {};
set widgetData(value: ObjectInterface) {
for (let item in value) {
this.data[item] = value[item];
}
}
get widgetData(): ObjectInterface {
return this.data;
}
public id: string = '';
}
在发现时,请打破循环以提高性能。 找不到时,默认情况下它将返回null。