我在java中使用For循环做错了什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在java中使用For循环做错了什么?相关的知识,希望对你有一定的参考价值。
我一直在四处寻找这个问题的答案,我似乎无法弄明白。我认为问题似乎与我的代码的“范围”有关,但我不知道我做错了什么,我真的可以使用一些帮助。我是Java的新手。
我的目标
- 在添加之前测试数组中是否已存在对象。
- 如果对象已存在于数组中,则返回null。
- 如果数组中不存在,则创建它然后返回它。
代码
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