繁体   English   中英

如何在向量和 int 中的对象之间进行比较? : Java

[英]How do I make a comparison between the objects in a vector and an int? : Java

我正在尝试使用 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 循环中大约一半。 任何帮助将非常感激。 谢谢。

编辑:“无法访问”语句问题是因为这个

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 或更高版本,因此不能使用 generics,则必须在循环中进行转换:

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

这在执行时基本上与通用版本具有相同的效果,但是编译器无法为您提供太多帮助,因为它不知道集合中的值类型。

首先,这不会编译:

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

否则,类型转换会做

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM