我在java中使用For循环做错了什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在java中使用For循环做错了什么?相关的知识,希望对你有一定的参考价值。

我一直在四处寻找这个问题的答案,我似乎无法弄明白。我认为问题似乎与我的代码的“范围”有关,但我不知道我做错了什么,我真的可以使用一些帮助。我是Java的新手。

我的目标

  1. 在添加之前测试数组中是否已存在对象。
  2. 如果对象已存在于数组中,则返回null。
  3. 如果数组中不存在,则创建它然后返回它。

代码

    public Business addBusiness(String person, String business, String location) {
    int id = 0;

    for (Business business : businesses ) {
        if (business.getPerson().equals(person)) {
            if (business.getBusiness().equals(business)) {
                if (business.getLocation().equals(location)) {
                    return null;
                }
            }
        }
    }
    Business newBusiness = new Business(person, business, location, id);
    return newBusiness;
}

运行时会发生什么

当我运行代码时,它将很乐意在具有相同细节的对象之后创建对象。这让我相信我的逻辑存在问题。我期待当它返回null时,那将是它的结束。

我很感激你可以给我解决这个问题的任何提示。

编辑:'商务'课程

public class Business {     
// Attributes //
private String person, business, location;
private int id;

// Constructor //

public Business(String person, String business, String location, int id) {
    this.person = person;
    this.business = business;
    this.location = location;
    this.id = id;
}

// Getters //

public String getPerson() {
    return person;
}

public String getBusiness() {
    return business;
}

public String getLocation() {
    return location;
}

public int getId() {
    return id;
}
}
答案

尝试

public Business addBusiness(String person, String business, String location) 
{
    int id = 0;

    for (Business b : businesses ) {
        if (b.getPerson().equals(person)) {
            if (b.getBusiness().equals(business)) {
                if (b.getLocation().equals(location)) {
                    return null;
                }
            }
        }
    }
    Business newBusiness = new Business(person, business, location, id);
    return newBusiness;
}

您正在使用您在循环中迭代的对象从函数的签名中屏蔽参数business。将其重命名为b可避免此问题。

另一答案

好的 - 所以我认为我明白了。非常感谢大家对此事的帮助。

public Business addBusiness(String person, String business, String location) 
{
int id = 0;

for (Business business : businesses ) {
    if (business.getPerson().equals(person)) {
        if (business.getBusiness().equals(business)) {
            if (business.getLocation().equals(location)) {
                return null;
            }
        }
    }
}
Business newBusiness = new Business(person, business, location, id);
return newBusiness;
}

这个问题是因为我从未在创建过程中将newBusiness对象实际添加到数组中。所以每次运行它都不会匹配现有的条目,因为数组中没有条目。

正确的代码应该是这样的:

public Business addBusiness(String person, String business, String location) 
{
int id = 0;

for (Business b : businesses ) {
    if (b.getPerson().equals(person)) {
        if (b.getBusiness().equals(business)) {
            if (b.getLocation().equals(location)) {
                return null;
            }
        }
    }
}
Business newBusiness = new Business(person, business, location, id);
b.add(newBusiness); // This was the missing line, now it seems to work fine.
return newBusiness;
}

显然,我还有很多东西需要学习。

以上是关于我在java中使用For循环做错了什么?的主要内容,如果未能解决你的问题,请参考以下文章

For-Each循环Java错误ArrayIndexOutOfBoundsException

循环没有终止,请有人解释做错了啥[重复]

Java 11 JSOUP SSLHandshakeException

我在这里做错了什么?

Java2D 游戏随机卡顿。我究竟做错了啥?

我在我的代码中做错了啥?