2017-12-16 10 views
1

私はこの質問に対するいくつかの答えを探していましたが、私はそれを理解できないようです。問題は自分のコードの 'スコープ'にあるようだが、私は何が間違っているのか分からず、実際に助けてもらうことができる。私は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; 
} 

私はそれだけで幸せに同じ内容を持つオブジェクトの後にオブジェクトを作成するコードを実行すると、私は

それを実行するとどうなりますか。これは私の論理に問題があると私に信じさせる。私はそれがヌルを返したときに、それがそれの終わりになることを期待していました。

この問題を解決するためのアドバイスをいただければ幸いです。

EDIT:あなたはあなたがループ内で反復処理しているオブジェクトと関数のシグネチャからのパラメータbusinessをマスキングした

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のクラス

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; 
} 
} 
+0

は**ビジネス**はarraylistですか? – Developer

+0

'business.getPerson()'、 'business.getBusiness()'および 'business.getLocation()'は何を返しますか? –

+0

私はビジネスオブジェクトの配列を持っています。ビジネスが作成されると、それは人にビジネスと場所が与えられます。 getPersonはString型を返します getBusinessは、文字列 のgetLocationは、彼らは私のビジネスオブジェクトのための「ゲッター」メソッドだ文字列 を返します。私は "配列内のオブジェクトを調べ、その名前の人が既に存在するかどうかを確認します。存在する場合は、その名前のビジネスが既に存在するかどうかを確認します。その場所がすでに存在する場合は、 - すべての情報が一致する場合、ビジネスはアレイ内にすでに存在していなければなりません。 –

答えて

1

は試してみてください。これをbに変更すると、この問題は回避されます。

+0

しかし、それらの違いは何ですか? – Developer

+0

この場合、ビジネスビジネスはビジネスbに置き換えられます。 xD – hsnsd

+0

addBusiness(..)はString paramビジネスを持ち、forループはビジネスビジネスを作成しています.... !!!! ビジネスオブジェクトを確認しています...文字列かビジネスかどうかはわかりません。 –

1

私はそれを理解したと思います。この件についてお手伝いいただき、ありがとうございます。

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; 
} 

正しいコードのようなものでなければなりません。

関連する問題