有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

两个整数的java模除

我不断收到错误“运算符%对于参数类型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 % tableSize] == null)

    table[key % tableSize] = node;

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


共 (4) 个答案

  1. # 1 楼答案

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

    if(table[key.intValue() % tableSize.intValue()] == null)
            table[key.intValue() % tableSize.intValue()] = node;
    
  2. # 2 楼答案

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

    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

    但是,您可能还想考虑使用一个{{CD2>}(不^ {CD4}})来键入密钥,并仅在需要EME>的点(当您将其添加到^ {CD5>})时将其装箱。使用原语类型可能会更快,不过您当然应该对其进行基准测试

  3. # 3 楼答案

    这对我来说很好

    Integer x = Integer.valueOf(10);
    Integer y = Integer.valueOf(3);
    
    int z = x % y;
    
    System.out.println(z);
    

    没问题。输出:

    1
    

    你犯了什么错误?你使用的是什么版本的Java?看起来您使用的是低于1.5的Java

  4. # 4 楼答案

    我可以获得一些样本Integer % Integer代码,以便在Java1.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);
                                ^
    

    最合理的解释是,因为Java introduced autoboxing and autounboxing in 1.5,您必须使用1.5之前的Java编译器,比如说1.4

    解决方案:

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