首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试编写一个简单的程序来测试Collatz猜想中的数字

尝试编写一个简单的程序来测试Collatz猜想中的数字
EN

Stack Overflow用户
提问于 2016-09-25 11:53:07
回答 1查看 130关注 0票数 0

我只是想通过说我是一个编程新手来开始这件事。这可能是我写过的最高级的代码。

我正在尝试测试Collatz猜想中的数字。我的输入变量应该在循环到1之后加1。如果不是1,那么它就会转到其他2个函数。如果数是偶数,则除以2;如果是奇数,则乘以3,再加上1。

这个数学方程之所以如此有趣,是因为我们不知道是否所有的数字都有足够的次数通过这个方程。

我也知道在循环中没有中断,但这不是问题所在。我的问题是输出。下面是我的代码:

代码语言:javascript
复制
public class class1 {

static int output = 0;
static int input = 1;
static int turn = 0;

public static void main(String[] args) {
    output = input;
    for (;;) {
        if(input != 1){
            if (input % 2 == 0) {
                even(input);
                System.out.println("output = " + input + " turn = " + turn);
            } else if (input % 2 == 1) {
                odd(input);
                System.out.println("output = " + input + " turn = " + turn);
            }
        }else{
            System.out.println("done in " + turn + " turns");
            turnsTested++;
            turn = 0;
            output = input;
        }
        turn++;
    }
}//end main


public static int even(int input2) {
    input = input / 2;
    return input;

}

public static int odd(int input2) {
    input = (input * 3);
    input++;
    return input;
     }
}//end class

运行以下代码的输出:

代码语言:javascript
复制
output = 2734 turn = 105

output = 1367 turn = 106

output = 4102 turn = 107

output = 2051 turn = 108

output = 6154 turn = 109

output = 3077 turn = 110

output = 9232 turn = 111

output = 4616 turn = 112

output = 2308 turn = 113

output = 1154 turn = 114

output = 577 turn = 115

output = 1732 turn = 116

output = 866 turn = 117

output = 433 turn = 118

output = 1300 turn = 119

output = 650 turn = 120

output = 325 turn = 121

output = 976 turn = 122

output = 488 turn = 123

output = 244 turn = 124

output = 122 turn = 125

output = 61 turn = 126

output = 184 turn = 127

output = 92 turn = 128

output = 46 turn = 129

output = 23 turn = 130

output = 70 turn = 131

output = 35 turn = 132

output = 106 turn = 133

output = 53 turn = 134

output = 160 turn = 135

output = 80 turn = 136

output = 40 turn = 137

output = 20 turn = 138

output = 10 turn = 139

output = 5 turn = 140

output = 16 turn = 141

output = 8 turn = 142

output = 4 turn = 143

output = 2 turn = 144

output = 1 turn = 145

done in 146 turns

所以我有一个错误。我找不到我的问题。

EN

回答 1

Stack Overflow用户

发布于 2016-09-25 13:05:28

代码语言:javascript
复制
        if (input % 2 == 0) {
            // transforming a primitive method argument in a function is
            // *NOT* reflected on the variable passed as argument:
            // a call to the function will pass *the value* of the variable 
            // and not the reference to the variable
            input = even(input);
            System.out.println("output = " + input + " turn = " + turn);
        } else if (input % 2 == 1) {
            // see above
            input = odd(input);
            System.out.println("output = " + input + " turn = " + turn);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39683216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档