2016-05-01 2 views
0

Я создаю два класса. Первый (назовите его Class1) имеет один частный атрибут: цена. Второй один (назовем его Class2) необходимо иметь набор объектов Class1:Петля через набор

Мой код:

private HashSet set = new HashSet<Class1>(); 

Цель состоит в том, чтобы создать метод в Class2, который принимает Int в качестве аргумента и проходит через объекты, чтобы проверить, пока не найдет один, который имеет цену, равную заданному числу аргументов. Он должен вернуть объект. Например, я хочу найти объект с ценой 500, поэтому я вызываю функцию check (500) и возвращает именно этот объект, который имеет цену 500. Как я могу это сделать?


Мой код:

public Class1 check(int p) 
    { 
    Class1 c = new Class1(p); 
    Iterator it = set.iterator(); 
    while(it.hasNext()) 
    { 
    // HERE IS THE HELP NEEDED. Using an array it 
    // would be sth like if(element[i].price == p) 
    // but I need to use set 
     if() 
     {} 
    it.next(); 


    } 
+0

Нет необходимости в цикле (напрямую), если вы просто используете Stream, который вы можете получить из HashSet. Но для получения более полных ответов, пожалуйста, создайте и опубликуйте свою программу [mcve] - пожалуйста, прочитайте ссылку. –

+0

взгляните на это: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html это расширенный цикл для цикла –

+0

[Итерация через элементы HashSet] (http: //www.java2s .com/учебник/Java/0140__Collections/IteratethroughelementsofHashSet.htm) – rdonuk

ответ

0

В классе Class1, определить метод получения

int getPrice() { return price; } 

использовать его в своем классе Class2

Class1 curObj = it.next(); 
if (curObj.getPrice() == p) { 
    your logic 
} 
0

Добавить добытчикатрибут цена в class1, то метод проверки может быть следующим:

public Class1 check(int p) 
{ 
    for (Class1 c1 : set) 
    { 
    if (c1.getPrice() == p) 
    return c1; 
    } 
    return null 
} 
0

Что-то, как это должно работать:

public Class1 check(int p) { 
    Iterator<Class1> it = set.iterator(); 
    while (it.hasNext()) { 
     Class1 next = it.next(); 
     if (next.getPrice() == p) { 
      return next; 
     } 
    } 
    return null; 
} 

Я предположил, ваш класс Class1 имеет getPrice метод, который возвращает цену, это Конечно, невозможно сравнить цену, которую нам нужно найти, на цену объекта, если нет доступа к полю.

0

Ваше объявление типового типа неверно и, следовательно, у вас есть raw type; и вы должны предпочесть интерфейс Set. Что-то вроде

private Set<Class1> set = new HashSet<>(); 

И вы можете использовать расширенный for-each loop итерировать ваши set элементы и найти соответствующий price с чем-то вроде

public Class1 check(int p) { 
    for (Class1 item : set) { 
     if (item.getPrice() == p) { 
      return item; 
     } 
    } 
    return null; 
} 
1

Вы можете сделать это так, - однако вам потребуется доступ к price, чтобы иметь возможность сравнить его. Если цена сама по себе является частной, для нее должен быть геттер, который я предполагаю в своем решении.

public Class1 check(int p) { 
    for (Class1 c : set) { 
     if (c.getPrice() == p) return c; 
    } 
    return null; // none found 
} 
0

Всякий раз, когда у вас есть частные переменные, выставляйте их через функцию getter. Сеттеры и геттеры всегда будут вам полезны всякий раз, когда вы будете писать код с некоторыми фреймворками, такими как Spring, Hibernate и т. Д.

public class class2 { 

    private HashSet set = new HashSet<Class1>(); 

    public Class1 check(int price) { 
     Iterator<Class1> iterator = set.iterator(); 
     while(iterator.hasNext()) { 
      Class1 next = iterator.next(); 
      if(next.getPrice() == price) 
       return next; 
     } 
     return null; 
    } 
} 

class Class1 { 
    private int price; 

    public int getPrice() { 
     return price; 
    } 

    public void setPrice(int price) { 
     this.price = price; 
    } 
} 
0

Вы можете это перебирать множество и в каждой итерации сравнить объект по отношению к ценовому параметру, если найден возвращает объект, если не возвращает нулевой

Пример

public Class1 check(int p) 
    { 

    for(Class c : set){ 
     if(c.getPrice()==p){ 
       return c; 
     } 
    } 
    return null; 
    }