繁体   English   中英

为什么我使用Java在斐波那契数列中得到负数

[英]Why am i getting negative numbers in Fibonacci series using 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;

        }

    }

}

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

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


另请参见Integer.MAX_VALUE

好了,您可以对System.out.print使用'if'来检查结果是负数还是正数。 之所以得到负值,是因为int仅“是” 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;
}

尝试将变量的类型从“ int”修改为“ long int”或“ unsigned int”。 也许高价值会修改符号位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM