为什么我使用java在Fibonacci系列中得到负数

时间:2017-11-29 17:18:58

标签: java

我已编写此代码以通过输入大小来获取斐波那契数字。 我得到的结果是正确的,但我唯一担心的是更高范围的输入值的某些值的负号。

1-我无法在代码中找到缺陷,如何摆脱输出中的负值。 2-为什么在一些负值之后有正值。 3-第一个负值是-1323752223然后是正数。

谢谢。

以下是代码:

import java.util.Scanner;

public class FibonacciSeries {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a, c = 0;
        int result = 0;
        int b = 1;

        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the Number to display Fibonacci Series");
        a = scan.nextInt();

        System.out.println("Fibonacci Seriers is as follows");


        for (int i = 1; i <= a; i++) {
            System.out.print(" "+result+" ");
            result = c + b;
            b = c;
            c = result;

        }

    }

}

3 个答案:

答案 0 :(得分:0)

根据输入值,您可能超过整数可以容纳的最大值

整数限制为2 ^ 31-1或2,147,483,647。一旦达到该阈值,该数字将环绕并以最小值-2 ^ 31或-2,147,483,648开始。

Also see Integer.MAX_VALUE.

答案 1 :(得分:0)

嗯,你可以使用&#39;如果&#39;用于System.out.print以检查结果是否为负数或正数。你得到负值的原因是因为int只是&#34;只有&#34; 32位长。

你可以使用long而不是int,这会使它对Fib更好一些。顺序,但它不会解决你的实际问题 - 负数。

以下是代码:

for( int i = 1; i <= a; i ++ ) {
    if( result >= 0 ) {
        System.out.print(" " + result + " ");
    }
    result = c + b;
    b = c;
    c = result;
}

答案 2 :(得分:0)

尝试修改&#39; int&#39;的变量类型到了#long;&#39; long int&#39;或者&#39; unsigned int&#39;。也许高价值会修改符号位。