我尝试将long
变量改为BigInteger
,因为我在其中存储斐波那契数列的数字,然后最终将它们转换为字符串。
public class Fib {
public static void main(String args[])
{
long n1=0,n2=1,n3,i,count = 100;
System.out.print(n1+" "+n2);//printing 0 and 1
for(i=2;i<count;++i)//loop starts from 2 because 0 and 1 are already printed
{
n3=n1+n2;
System.out.print(" "+n3);
n1=n2;
n2=n3;
}
}} :
我试着把它转换成一个BigInteger和一个字符串,就像这样……
public class Fib {
public static void main(String args[])
{
long n1=0,n2=1,n3,i,count = 100;
BigInteger n1,n2,n3,i,count = BigInteger.valueOf(n1,n2,n3,i,count)
System.out.print(n1+" "+n2);//printing 0 and 1
for(i=2;i<count;++i)//loop starts from 2 because 0 and 1 are already printed
{
String n3= n1+n2;
System.out.print(" "+n3);
n1=n2;
n2=n3;
}
}}
然而,一个错误发生了,我试着阅读将长变量转换为BigIntegers和将BigIntegers转换为字符串的语法,我明白我所做的是错误的。
然而,我似乎找不到实现我想要做的事情的正确方法,这就是为什么我来到StackOverflow寻求帮助。
如果有人能帮我这个忙,我将不胜感激.
2条答案
按热度按时间j2qf4p5b1#
java规范严格定义了什么运算符可以应用于什么以及它的含义。具体来说,所有常见的数学运算符(
+
,-
等)都只适用于原始数字**,唯一的例外是+
,它可以显示在字符串和其他任何东西之间,但这是一个完全不同的东西(字符串连接而不是数字加法)。它们根本不能应用于BigInteger-规范没有列出这意味着什么,java没有运算符重载。
直接替换的方法名为
add
、subtract
、multiply
、divide
,令人困惑。更好的名字应该是
plus
,minus
,times
,和dividedBy
。在这个意义上,如果我在黑板上写a = b + c
,我要求你大声读出来,你会说:“a等于B加c”。不是“a等于b加c”。但是,它就是它-只需记住,a.add(b)
将计算a和b的总和并返回一个全新的BigInteger
结果。它不会 * 将b
添加到a
。(BigInteger是不可变的;不可能通过调用其上的方法或黑客之外的任何其他方式来更改其值)。wgx48brx2#
首先,您需要更改以下行,因为您不能同时执行多个示例化,并且提供的方法只允许传递一个参数。
变更
到
注意我是如何改变长整型变量名的。你不能在同一个作用域中声明一个变量名两次。
您不能这样做:
因为它们有相同的名字。你指的是哪个n1?所以,你的长需要有不同的名字比你的大整数。
实际上,你不需要所有的变量/属性都是BigInteger。当我清理代码时,我得到了这个:
(EDIT/添加)
实际上,BigInteger已经内置了0和1,所以你可以