Я сделать таблицу умножения (от 2 до 9) - то есть 10 случайно сгенерированных образцы, напримерТаблица умножения
2 * 3 =
4 * 5 =
... (7 more times)
9 * 5 =
Дело в том, все образцы должны быть разными и образцы
5 * 8 =
и
8 * 5 =
считается тот же
Моя идея состоит в том, чтобы сделать пару классов, которая описывает пару чисел, которые нужно умножить, переопределить метод равенства, создать случайные числа, создать пару и добавить объекты пар в Set.
public class Pair {
private int first;
private int second;
public int getFirst() {
return first;
}
public int getSecond() {
return second;
}
public void setFirst(int first) {
this.first = first;
}
public void setSecond(int second) {
this.second = second;
}
public Pair() {}
public Pair(int first, int second) {
this.first = first;
this.second = second;
}
@Override
public boolean equals(Object o) {
if (o == null || o.getClass() != this.getClass())
return false;
Pair that = (Pair) o;
return (this.first == that.first && this.second == that.second) ||
(this.second == that.first && this.first == that.second);
}
@Override
public int hashCode() {
int result = 17;
int prime = 31;
result = result * prime + first;
result = result * prime + second;
return result;
}
@Override
public String toString() {
return first + " * " + second + " =";
}
}
public static Pair[] createTable(int count) {
Random random = new Random();
Set<Pair> set = new HashSet<Pair>();
while (set.size() < count) {
int first = random.nextInt(8) + 2;
int second = random.nextInt(8) + 2;
set.add(new Pair(first, second));
}
return set.toArray(new Pair[count]);
}
Проблема состоит в том, что некоторые массивы, которые метод CreateTable() возвращает состоят эквивалентные пары , например, в
[7 * 6 =, 5 * 6 =, 4 * 8 =, 4 * 9 =, 2 * 8 =, 9 * 2 =, 8 * 2 =, 6 * 3 =, 5 * 2 =, 4 * 2 =]
есть пары 2 * 8 и 8 * 2 не должны быть там
где ошибка?
Простым хешем будет только: 'return first + second;', который не имеет проблемы с упорядочением и является достаточным хорошо распределены по всему набору. –