黑马程序员技术交流社区

标题: 求助基础测试题 求斐波那契数列第n项,n<30,斐波那契数... [打印本页]

作者: 阿霞    时间: 2015-3-28 23:58
标题: 求助基础测试题 求斐波那契数列第n项,n<30,斐波那契数...
本帖最后由 阿霞 于 2015-3-30 15:01 编辑

正在做基础测试题,题目求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
代码

import java.util.*;
public class GetDemo1
{
        public static void main(String[] args)
        {
               getNum();
        }
        //定义方法从控制台输入项数n
        public static void getNum()
        {        
                Scanner in=new Scanner(System.in);
                sop("请输入项数:");               
                        //获取输入值
                int i=in.nextInt();
                                boolean flag=true;
                                while(flag)
                                {
                                        //定义if语句判断项数的范围打印斐波那契数列值
                                        if(i<30&&i>=1)
                                                {
                                                        flag=false;               
                                                        sop("斐波那契数列第"+i+"项值为:"+getValue(i));
                                                }
                  
                                        else
                                                 sop("您输入的值错误,请重新输入。值范围0-29");
                                }                           
                                in.close();
        }

        //定义方法获取斐波那契数列第n项值,n<30
        public static int getValue(int i)
        {
                int[] arr=new int[30];
                arr[0]=arr[1]=1;
                //定义for循环,利用公式获取值
                for(int n=2;n<30;n++)
                {
                    arr[n]=arr[n-1]+arr[n-2];
                }
                return arr[i-1];
        }
        //定义输出方法
        public static void sop(Object obj)
        {
                System.out.print(obj);
        }
}


输入正确值没有问题
但是 输入错误值后 就会您输入的值错误,请重新输入。值范围0-29无限循环  不能自动到请输入项数
还想可以在明天之内提交通过呢
着急......




作者: 森森    时间: 2015-3-29 02:43
没听过                     
作者: liyanghml    时间: 2015-3-29 03:03
  1.   while(flag)
  2.                                 {
  3.                                         //定义if语句判断项数的范围打印斐波那契数列值
  4.                                         if(i<30&&i>=1)
  5.                                                 {
  6.                                                         flag=false;               
  7.                                                         sop("斐波那契数列第"+i+"项值为:"+getValue(i));
  8.                                                 }
  9.                   
  10.                                         else
  11.                                                  sop("您输入的值错误,请重新输入。值范围0-29");
复制代码
  else  信息提示完毕之后  要加上  break  跳出 循环体哟,哥们


作者: 阿霞    时间: 2015-3-29 09:32
本帖最后由 阿霞 于 2015-3-29 09:41 编辑
liyanghml 发表于 2015-3-29 03:03
else  信息提示完毕之后  要加上  break  跳出 循环体哟,哥们

第一个给帮忙解决的  多谢 哥们儿
break可以跳出啊  
但是 要重新输入就要在运行一次 不能自动到输入项数

作者: chenlanaq    时间: 2015-3-29 10:05
你是要重新再输入吧。。
sop("请输入项数:");               
   //获取输入值
int i=in.nextInt();
把这部分再加到else里啊,别break,break了,你的while循环还有啥用。。
作者: 山里孩子    时间: 2015-3-29 15:06
  1.          sop("请输入项数:");               
  2.                         //获取输入值
  3.                 int i=in.nextInt();
  4.                                 boolean flag=true;
  5.                                 while(flag)
  6.                                 {
  7.                                         //定义if语句判断项数的范围打印斐波那契数列值
  8.                                         if(i<30&&i>=1)
  9.                                                 {
  10.                                                         flag=false;               
  11.                                                         sop("斐波那契数列第"+i+"项值为:"+getValue(i));
  12.                                                 }
  13.                   
  14.                                         else
  15.                                                  sop("您输入的值错误,请重新输入。值范围0-29");
  16.                                 }                        
复制代码
这部分要改下:
  1.       while(true){  //while要加到输入方法前面
  2.                   sop("请输入项数:");               
  3.            //获取输入值
  4.           int i=in.nextInt();
  5.                         //定义if语句判断项数的范围打印斐波那契数列值
  6.                         if(i<30&&i>=1)
  7.                                 {              
  8.                                         sop("斐波那契数列第"+i+"项值为:"+getValue(i));
  9.                                         break;//执行完成后要跳出
  10.                                 }
  11.                         else
  12.                                  sop("您输入的值错误,请重新输入。值范围0-29");//输入不正确再次循环
  13.                 }                        
复制代码




作者: ShadowDancer    时间: 2015-3-30 08:53
怎么这么麻烦。。。
直接查一下  斐波那契通项公式就行了吧。。。
作者: 阿霞    时间: 2015-3-30 14:58
山里孩子 发表于 2015-3-29 15:06
这部分要改下:

就是这样
多谢  哥们儿
作者: 胡谭龙    时间: 2015-3-30 16:08
慢慢研究

作者: liyanghml    时间: 2015-3-31 20:42
阿霞 发表于 2015-3-29 09:32
第一个给帮忙解决的  多谢 哥们儿
break可以跳出啊  
但是 要重新输入就要在运行一次 不能自动到输入项数

不好意思 :lol 今天才有时间回,当时没考虑那么多,下楼的哥们已经说了,我就不在重复啦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2