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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄兴旺 于 2013-8-26 18:56 编辑

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?/* 1.程序分析: 兔子的规律为数列1 2 3 4 5 6 7 月2,2,4,6,10,16,26 个数 从第3个月开始前两个月之和等于本月的总数*///(输入月份,然后求出兔子数)
package booktest;

import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Number11{
public long getsumrabbit(long month){
long l1=1,l2=2;
long k,n=2;
if(month==1)
return 2;
if(month==2)
return 2;
else{        
search :
for(k=3;k<=month;k++)
{

l1=l1+l2;
n++;
if(n==month){
return l2;
break search;
}
l2=l1+l2;
n++;
if(n==month){
return l1;
break search;
}
}

}
}/*这里说我没有返回值 但我有啊返回L1和L2而且都是long类型的,我的另一个程序也出现了这样的问题,就在for循环底下加个IF的判断然后在加个返回的值,就说我没有返回的值!而且说break search;代码不可达.郁闷为什么这里不可以呢 ?*/


public static void main(String[] args) throws Exception{
System.out.println("请输入你想知道的月份");
BufferedReader month1 =new BufferedReader(new InputStreamReader(System.in));
String monthsum=month1.readLine();
long month=Integer.parseInt(monthsum); //当前String对象转成int
Number11 ss=new Number11();
System.out.println("这个月的兔子总共有:"+ss.getsumrabbit(month)+"只");

运行结果再用计算算过来老是不对啊,代码没问题啊?????


评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

2 个回复

倒序浏览
首先。楼主,下次发代码麻烦发到代码框内。。排版太难看了。。
然后呢,return 和 break请不要放在一起,不然你到底是想它他return呢还是break呢?
其次,你的确没有返回相应类型的参数。
你在仔细看看你的代码,你的else里面又嵌套了两个if,虽然两个都有定义返回值。但是你的else却没有定义返回值。
再者。。你上面的两个if啊。应该是想写成if else if 吧?。。
我给你重新发一下代码。你的代码太乱了。我没细看你的逻辑。给你写了点注释。你再对比看看吧。。
  1. public class Number11{
  2.         public long getsumrabbit(long month){
  3.                 long l1=1,l2=2;
  4.                 long k,n=2;
  5.                 if(month==1){
  6.                         return 2;
  7.                 }
  8.                 //这里用else if吧
  9.                 else if(month==2){
  10.                         return 2;
  11.                 }
  12.                 else{   
  13.                         //return就直接返回了,没必要再用break了。
  14.                         search :
  15.                                 for(k=3;k<=month;k++)
  16.                                 {
  17.                                         l1=l1+l2;
  18.                                         n++;
  19.                                         if(n==month){
  20.                                                 //break search;
  21.                                                 return l2;
  22.                                         }
  23.                                         l2=l1+l2;
  24.                                         n++;
  25.                                         if(n==month){
  26.                                                 //break search;
  27.                                                 return l1;
  28.                                         }
  29.                                 }
  30.                 //我没仔细看你的逻辑,这个只是我随便加上去的。就是这里你没有加上返回值。
  31.                 return l1;
  32.                 }
  33.         }
  34. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
代码跟你修改好了,结果也是对的。
至于你出错的地方楼上哥们说的很对。顶一个

package com.itcast.demo;

import java.io.InputStreamReader;
import java.io.BufferedReader;
//兔子的规律为数列
//1 2 3 4 5   6 7 月
//2,2,4,6,10,16,26 个数
public class Number11 {
        public long getsumrabbit(long month) {
                long l1 =2, l2 = 2;//这里是我修改的地方
                long k, n = 2;
                if (month == 1)
                        return 2;
                if (month == 2)
                        return 2;
                else {
                        search: for (k = 3; k <= month; k++) {
                                l1 = l1 + l2;
                                n++;
                                if (n == month) {
                                        return l1;//这里是我修改的地方
                                        // break search;
                                }
                                l2 = l1 + l2;
                                n++;
                                if (n == month) {
                                        return l2;//这里是我修改的地方
                                        // break search;
                                }
                        }

                }
                return 2;//这里是我修改的地方
        }

        /*
         * 这里说我没有返回值
         * 但我有啊返回L1和L2而且都是long类型的,我的另一个程序也出现了这样的问题,就在for循环底下加个IF的判断然后在加个返回的值,就说我没有返回的值!而且说break
         * search;代码不可达.郁闷为什么这里不可以呢 ?
         */

        public static void main(String[] args) throws Exception {
                System.out.println("请输入你想知道的月份");
                BufferedReader month1 = new BufferedReader(new InputStreamReader(
                                System.in));
                String monthsum = month1.readLine();
                long month = Integer.parseInt(monthsum); // 当前String对象转成int
                Number11 ss = new Number11();
                System.out.println("这个月的兔子总共有:" + ss.getsumrabbit(month) + "只");
        }
}

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马