Java 两个整数的模除

Java 两个整数的模除,java,division,modular-arithmetic,Java,Division,Modular Arithmetic,我不断收到错误“运算符%对于参数类型Integer,Integer未定义”,我不太清楚为什么会发生这种情况。我认为,由于模除不能返回小数,所以使用整数值就可以了 这是在我正在创建的程序中的一个方法中发生的。 代码如下: public void addToTable(Integer key, String value) { Entry<Integer, String> node = new Entry<Integer, String>(key, value)

我不断收到错误“运算符%对于参数类型Integer,Integer未定义”,我不太清楚为什么会发生这种情况。我认为,由于模除不能返回小数,所以使用整数值就可以了

这是在我正在创建的程序中的一个方法中发生的。 代码如下:

    public void addToTable(Integer key, String value)
{
    Entry<Integer, String> node = new Entry<Integer, String>(key, value);
    if(table[key % tableSize] == null)
        table[key % tableSize] = node;
}


如有任何帮助或建议,将不胜感激

尝试将整数转换为整数,然后运行
%

if(table[key.intValue() % tableSize.intValue()] == null)
        table[key.intValue() % tableSize.intValue()] = node;

这对我来说很好

Integer x = Integer.valueOf(10);
Integer y = Integer.valueOf(3);

int z = x % y;

System.out.println(z);
没问题。输出:

1

你犯了什么错误?您使用的是什么版本的Java?似乎您使用的是低于1.5的Java。

我可以获得一些示例
Integer%Integer
代码,以便在Java 1.5和1.6中成功编译,但在1.4中则不行

public static void main(String[] args)
{
   Integer x = 10;
   Integer y = 3;
   System.out.println(x % y);
}
这是1.4中的错误:

ModTest.java:7: operator % cannot be applied to java.lang.Integer,java.lang.Integer
       System.out.println(x % y);
                            ^
最合理的解释是,因为您必须使用1.5(比如1.4)之前的Java编译器

解决方案:

  • 升级到Java1.5/1.6/1.7
  • 如果必须使用1.4,请使用
    Integer.intValue()
    提取
    int
    值,您可以对其使用
    %
    运算符

此处尝试的是取消装箱,即将对象自动转换为基本类型(另一种方式是自动装箱)

Java文档这样说:


当包装类的对象为以下对象时,Java编译器将应用取消装箱:

  • 作为参数传递给需要相应基元类型的值的方法
  • 分配给相应基元类型的变量

因此,一种可能性是,您没有执行这些操作之一,尽管乍一看,您既没有将mod表达式传递给方法,也没有将其分配给变量,但至少在Java 6中是有效的:

class Test {
    public static void main(String args[]) {
        Integer x = 17;
        Integer y = 5;
        System.out.println (x % y);
        String [] z = new String[10];
        z[x % y] = "hello";
    }
}
另一种可能性是,您使用的是Java 5之前的环境,其中引入了自动装箱和取消装箱

在这种情况下,最好的办法可能是显式地使用
Integer.intValue()
来获取底层的
int


不过,您可能还想考虑使用“<代码> int <代码> >(不是<代码>整数>代码>),只在需要的地方装箱(当您将其添加到<代码>条目< /代码>)时。使用原语类型可能会更快,不过您当然应该对其进行基准测试以确保它的正确性。

您使用的是什么版本的Java?怀疑@durron597是正确的,并且您使用的是<1.5,因此请按照下面的答案进行操作。在Java 1.5和1.6中,我可以成功编译Integer%Integer。
ModTest.java:7: operator % cannot be applied to java.lang.Integer,java.lang.Integer
       System.out.println(x % y);
                            ^
class Test {
    public static void main(String args[]) {
        Integer x = 17;
        Integer y = 5;
        System.out.println (x % y);
        String [] z = new String[10];
        z[x % y] = "hello";
    }
}