gpt4 book ai didi

java - 由于某种原因,程序类没有执行代码

转载 作者:行者123 更新时间:2023-12-01 12:12:28 25 4
gpt4 key购买 nike

我尝试编写代码来获取大数的最大素因数(在本例中为 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 始终小于该值,因此循环是无限的。

最好是让 inum 都具有 long 类型,而不是 int > float 。即使你这样做,你的循环也可能会运行很长时间。

事实上,如果没有因素,循环将是无限的,因为 sum 永远不会被设置为 0 以外的值,然后既然你说 while (sum== 0),循环将重新开始并无限地做同样的事情。因此,除了环绕问题之外,您的算法仍然需要改进。

进一步说明:您绝对不想为此使用float,因为数字 600851475143 无法准确表示。 num 的实际值为 600851480576。

关于java - 由于某种原因,程序类没有执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27196535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com