A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 阿霞 于 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无限循环  不能自动到请输入项数
还想可以在明天之内提交通过呢
着急......



9 个回复

倒序浏览
没听过                     
回复 使用道具 举报
  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:41 编辑
liyanghml 发表于 2015-3-29 03:03
else  信息提示完毕之后  要加上  break  跳出 循环体哟,哥们

第一个给帮忙解决的  多谢 哥们儿
break可以跳出啊  
但是 要重新输入就要在运行一次 不能自动到输入项数
回复 使用道具 举报
你是要重新再输入吧。。
sop("请输入项数:");               
   //获取输入值
int i=in.nextInt();
把这部分再加到else里啊,别break,break了,你的while循环还有啥用。。
回复 使用道具 举报
  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.                 }                        
复制代码



回复 使用道具 举报
怎么这么麻烦。。。
直接查一下  斐波那契通项公式就行了吧。。。
回复 使用道具 举报
阿霞 中级黑马 2015-3-30 14:58:05
8#

就是这样
多谢  哥们儿
回复 使用道具 举报
慢慢研究
回复 使用道具 举报
阿霞 发表于 2015-3-29 09:32
第一个给帮忙解决的  多谢 哥们儿
break可以跳出啊  
但是 要重新输入就要在运行一次 不能自动到输入项数

不好意思 :lol 今天才有时间回,当时没考虑那么多,下楼的哥们已经说了,我就不在重复啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马