需要循环外返回语句的方法

时间:2018-06-27 06:00:52

标签: java for-loop if-statement return curly-braces

我的方法在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;
    }

5 个答案:

答案 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。