我一直收到错误“对于参数类型,运算符%未定义整数,整数”我不太清楚为什么会发生这种情况。我认为,因为模块化除法不能返回具有整数值的小数点。
这是在我正在创建的程序中的方法中发生的。 代码如下:
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;
任何帮助或建议将不胜感激。
答案 0 :(得分:7)
我可以获得一些示例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);
^
最合理的解释是因为Java introduced autoboxing and autounboxing in 1.5,你必须使用1.5之前的Java编译器,比如1.4。
解决方案:
Integer.intValue()
提取int
值,您可以使用%
运算符。答案 1 :(得分:2)
这对我来说很好。
Integer x = Integer.valueOf(10);
Integer y = Integer.valueOf(3);
int z = x % y;
System.out.println(z);
没问题。输出:
1
你得到什么错误?您使用的是哪个版本的Java?看来你使用的是1.5以下的Java。
答案 2 :(得分:1)
你在这里尝试的东西称为拆箱,将对象自动转换为基本类型(另一种方式是自动装箱)。
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
(不是Integer
)作为密钥,并且仅在您需要时将其装箱(当您将其添加到Entry
)。使用原始类型可能会更快,但您当然应该对其进行基准测试。
答案 3 :(得分:0)
尝试将整数转换为整数,然后运行%
。
if(table[key.intValue() % tableSize.intValue()] == null)
table[key.intValue() % tableSize.intValue()] = node;