每当我提供一个大于10位的数字时,即使我在任何地方都使用过Error:Integer too large
数据类型,它也会显示错误long
。
这是我的计划:
class q3 {
boolean prime(long a) {
long c=0;
for(long i=1;i<=a;i++) {
if(a%i==0) {
c++;
}
}
if(c==2) {
return true;
} else {
return false;
}
}
public void main(long a) {
boolean result=false;
for(long i=1;i<=a/2;i++) {
if(a%i==0) {
result=prime(i);
} else {
result=false;
}
if(result==true) {
System.out.println(i);
}
}
}
}
答案 0 :(得分:4)
有几种可能的解释,说明如何判断数字太大可能会出错。但问题不在于您提供的代码中。
我怀疑问题是你试图像这样调用main
方法:
new q().main(1234567890);
失败,因为1234567890
是int
字面值,而不是long
字面值。写得像这样:
new q().main(1234567890L);
注意:
答案 1 :(得分:0)
我想你会发现当你开始进行大量的迭代(比如long
s)时,你会想要摆脱for
循环并开始使用{{ 1}}循环。
以下是你所拥有的:
while
但是for(long i = 1; i <= a/2; i++)
循环真正意味着可数集。当你有for
以外的东西作为int
循环的迭代时,你必须更仔细地考虑第二和第三个参数:
for
i <= a/2;
是a/2
吗?是int
吗?你需要写:
long
突然间,这变得更加复杂。当你写:
i <= ((long) a)/2L;
您是否确定i++;
运算符适用于++
值?大概。但是你应该检查一下。
通常,严肃的数学模型/计算使用long
循环,因为:
while
是一个易于理解的陈述,几乎没有含糊之处。您将在while(i < someValue)
循环内迭代i
(可能是long
或BigInteger
或其他任何内容),并减少您对参数的真正理解程度那个while
陈述。
你的程序可能有另一个问题,很难说你是如何打电话给这门课程的。但我认为你应该从重新编写这些循环开始。