【发布时间】:2017-02-27 23:00:49
【问题描述】:
此程序适用于 Java。它应该做Collatz猜想。在我的研究中,代码应该可以工作,但是当我输入 7 时,它会打印出一堆 22,我认为这是 java 保存整数的问题。
import java.util.*;
//If n is even, divide it by 2 to get n / 2. If n is odd, multiply it by 3 . and add 1
public class infNum {
private int num;
private int n;
private String comma = ", ";
public void start() {
System.out.println("enter a number");
Scanner keyboard = new Scanner (System.in);
int n = keyboard.nextInt();
num = n;
}
public void testEvenOdd() {
if((num % 2) == 0) {
ifEven(num);
} else {
ifOdd(num);
}
}
public void ifEven(int num) {
if(num == 1) {
return;
} else {
num = num / 2;
System.out.print(num + comma);
testEvenOdd();
}
}
public void ifOdd(int num) {
if(num == 1) {
return;
} else {
num = (num * 3) +1;
System.out.print(num + comma);
testEvenOdd();
}
}
}
【问题讨论】:
-
嗯,
7是一个奇数。7 * 3是 21,21 + 1是22。看起来你的程序完全按照你说的做了。 -
这个怎么称呼?开始方法在哪里,如果是开始,其他方法都不会被调用?
-
这更多的是您的
testEvenOdd方法检查num实例变量的问题,而您的其他方法永远不会更新它。目前他们只更新自己的参数,当方法结束时超出范围。 -
提示:
num在您的ifEven和ifOdd方法中引用作为参数传递的局部变量num。
标签: java