Как сделать сравнение между объектами в векторе и int?: Джава - PullRequest
0 голосов
/ 10 июня 2011

Я пытаюсь использовать условие if для сравнения объектов в векторе, которые представляют целые числа, со значениями типа int, чтобы я мог увеличивать те, которые появляются в векторе, в соответствии с тем, сколько раз они появляются в векторе,Я не могу на всю жизнь заставить его скомпилировать.Вот код:

package countjava;
import java.util.*;

public class Count {

    public static void main(String[] args) {

        Vector vect = new Vector();
        int[] amounts = new int[100];

        for (int i = 0; i <= 9999; i++) {
            VectorIntObject intObject = 
                    new VectorIntObject((int)Math.random() * 100);
            vect.add(intObject);
        }

        Collections.sort(vect);
        for (int i =0; 1 < 40; i++) {
            System.out.println(vect.get(i));
        }

        for (int i = 0; i < 10; i++) {
            for (int j = 0; j <= 99; j++) {
                Object ourObject = vect.get(i);
                if (ourObject.getVectorIntValue() == j) {
                    amounts[j]++;
                }
            }
        }

        for (int j = 0; j <= 99; j++) {
                System.out.println(amounts[j]);
        }
    }
}

class VectorIntObject {
    int value;
    public VectorIntObject(int value) {
        this.value = value;
    }

    public int getVectorIntValue() {
        return this.value;
    }
}

Сравнение должно происходить во вложенных циклах for примерно наполовину вниз.Любая помощь приветствуется.Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

РЕДАКТИРОВАТЬ: проблема «недостижимый» оператор из-за этого

for (int i =0; 1 < 40; i++)

1 всегда меньше 40, так что это бесконечный цикл.Вы имели в виду:

for (int i = 0; i < 40; i++)

Проблема в том, что ваша переменная ourObject имеет тип Object, поэтому вы не можете вызвать getVectorIntValue для нее - это не метод, объявленный в Object.

Вы должны использовать коллекцию универсальным способом.Таким образом, компилятор будет «знать», что коллекция содержит VectorIntObject ссылок.

Vector<VectorIntObject> vect = new Vector<VectorIntObject>();

// Code as before...

for (int i = 0; i < 10; i++) {
    for (int j = 0; j <= 99; j++) {
        // Note type of ourObject here, with no need to cast
        VectorIntObject ourObject = vect.get(i);
        if (ourObject.getVectorIntValue() == j) {
            amounts[j]++;
        }
    }
}

Отдельно я бы рекомендовал использовать ArrayList вместо Vector.

Если дляпо какой-то причине вы не можете использовать Java 1.5 или выше, поэтому вы не можете использовать дженерики, вместо этого вы должны привести в свой цикл:

for (int i = 0; i < 10; i++) {
    for (int j = 0; j <= 99; j++) {
        VectorIntObject ourObject = (VectorIntObject) vect.get(i);
        if (ourObject.getVectorIntValue() == j) {
            amounts[j]++;
        }
    }
}

Это в основном имеет тот же эффектвремя выполнения как общая версия, но компилятор не может оказать вам такую ​​большую помощь, потому что он не знает, какое значение будет в коллекции.

1 голос
/ 10 июня 2011

Прежде всего, это не скомпилируется:

Object ourObject = vect.get(i);
if (ourObject.getVectorIntValue() == j) {
    amounts[j]++;
}

Когда вы возвращаете Object из вектора и пытаетесь вызвать getVectorIntValue(), не вводя его тип VectorIntObject.

Если вы используете JDK 5 и выше, я предлагаю использовать Generics и назначить тип для Vector

Vector<VectorIntObject> vect = new Vector<VectorIntObject>();

Тогда это будет действительно:

VectorIntObject ourObject = vect.get(i);
if (ourObject.getVectorIntValue() == j) {
    amounts[j]++;
}

В противном случае Typecasting будет делать

VectorIntObject ourObject = (VectorIntObject)vect.get(i);
if (ourObject.getVectorIntValue() == j) {
    amounts[j]++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...