- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试编写代码来获取大数的最大素因数(在本例中为 600851475143)。在编写了四种不同的方法(2个用于显示结果,2个用于其他计算)之后,我编写了程序类,并尝试运行它。
当我运行它时,结果应该出现在控制台中,但什么也没有显示。我试图将应该打印的变量公开,然后手动打印它,但它不起作用。最终,我在main方法中写了最简单的System.out.print()
命令,但控制台中什么也没有出现。
我不知道问题是什么。这里有人有线索吗?
类(class):
public class Problem3 {
public float sum1;
public float sum2;
private float num = 600851475143f;
public void methodGuy(){
while(sum1==0){
for(int i=2; i<num/2; i++){
if(num%i==0){
sum1=num/i;
} else {}
}
}
}
public void show1(){
System.out.println("the result of Guys method is: " + sum1);
}
public void methodOr(){
for(int i=2; i<num/2; i++){
for(float x=num/2; x>2; x=x-1){
if(i*x==num){
sum2=x;
}
}
}
}
public void show2(){
System.out.println("the result of Ors method is: " + sum2);
}
}
程序类:
public class Program {
public static void main(String[] args) {
Problem3 x = new Problem3();
x.methodGuy();
x.show1();
x.methodOr();
x.show2();
}
}
最佳答案
methodGuy
永远不会终止,因为 int
无法变得那么大。
int
的最大可能值为 2147483647。如果您的 int
是该数字,并且您对其加一,则该数字将环绕并变为负数。因此,在i++
之后,下一个值将是-2147483648。由于只要 i
小于 600851475143/2 = 300425237071.5,循环就会继续,并且由于 i
始终小于该值,因此循环是无限的。
最好是让 i
和 num
都具有 long
类型,而不是 int
或 > float
。即使你这样做,你的循环也可能会运行很长时间。
事实上,如果没有因素,循环将是无限的,因为 sum
永远不会被设置为 0 以外的值,然后既然你说 while (sum== 0)
,循环将重新开始并无限地做同样的事情。因此,除了环绕问题之外,您的算法仍然需要改进。
进一步说明:您绝对不想为此使用float
,因为数字 600851475143 无法准确表示。 num
的实际值为 600851480576。
关于java - 由于某种原因,程序类没有执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27196535/
我是一名优秀的程序员,十分优秀!