В этом коде есть несколько синтаксических ошибок, но поскольку TofuBeer уже указал их в комментариях, я перейду к дизайну и логике.
Исходя из кода, я предполагаю, что у вас нет большого опыта работы с Java и, возможно, вообще не с программированием. Так что я собираюсь идти медленно здесь. Я надеюсь, что вы не оскорблены моими объяснениями.
Вы говорите, что пытаетесь выяснить, сколько объектов, которые вы храните (как два целых числа) в вашем массиве, равны. Для этого вы должны отслеживать, какие уникальные объекты вы уже видели. Затем вы сравниваете каждый объект со списком уникальных объектов и, если он не соответствует ни одному из них, добавляете его в список. Это основной алгоритм.
Теперь, вы заметили, что я продолжаю использовать слово "объект" в моем описании? Когда это происходит, это обычно означает, что вы должны делать урок. Я хотел бы сделать простой, как это, держа два целых числа:
class Box { // or whatever the objects are called
private final int height;
private final int width;
public Box(int h, int w) {
height = h;
width = w;
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
@Override
public boolean equals(Object other) {
if (!(other instanceof Box))
return false;
Box b = (Box) other;
return b.height == height && b.width == width;
}
@Override
public int hashCode() {
int hash = 7;
hash = 97 * hash + this.height;
hash = 97 * hash + this.width;
return hash;
}
}
Постарайтесь понять, что делает каждая часть этого кода (особенно, если это на самом деле ваша домашняя работа). Получив его, перейдите к следующей части: выполните вычисления, которые вы пытались выполнить.
Допустим, у вас есть массив коробок, например:
Box[] boxes = {
new Box(40, 40), new Box(40, 40), new Box(80, 40), new Box(40, 40)
};
(Я не могу сказать, используете ли вы массив или список, поэтому я просто выбираю один для демонстрации.)
Я уже дал алгоритм нахождения количества уникальных предметов, поэтому покажу, как его написать:
List<Box> unique = new ArrayList<Box>();
for (Box box : boxes) {
if (!unique.contains(box)) { // this is why I implemented equals() and hashCode()!
unique.add(box);
}
}
int numOfDifferentShape = unique.size();
Это гораздо проще, чем пытаться отслеживать два целых числа для каждого объекта, плюс у него есть то преимущество, что вы не можете запутать индексы массива.
Вы могли бы сделать это еще проще с Set
. Это будет выглядеть примерно так:
Set<Box> boxSet = new HashSet<Box>();
for (Box b : boxes)
boxSet.add(b);
int numOfDifferentShape = boxSet.size();
Обратите внимание, что эти последние два фрагмента используют функции из Java 1.5 , поэтому я не знаю, сталкивались ли вы с ними раньше.
Это проясняет ситуацию?