黑马程序员技术交流社区
标题:
古典问题兔子问题,球解决,各位大虾!!!
[打印本页]
作者:
ccyznhy
时间:
2013-8-25 22:39
标题:
古典问题兔子问题,球解决,各位大虾!!!
本帖最后由 黄兴旺 于 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)+"只");
运行结果再用计算算过来老是不对啊,代码没问题啊?????
作者:
gulup
时间:
2013-8-26 02:55
首先。楼主,下次发代码麻烦发到代码框内。。排版太难看了。。
然后呢,return 和 break请不要放在一起,不然你到底是想它他return呢还是break呢?
其次,你的确没有返回相应类型的参数。
你在仔细看看你的代码,你的else里面又嵌套了两个if,虽然两个都有定义返回值。但是你的else却没有定义返回值。
再者。。你上面的两个if啊。应该是想写成if else if 吧?。。
我给你重新发一下代码。你的代码太乱了。我没细看你的逻辑。给你写了点注释。你再对比看看吧。。
public class Number11{
public long getsumrabbit(long month){
long l1=1,l2=2;
long k,n=2;
if(month==1){
return 2;
}
//这里用else if吧
else if(month==2){
return 2;
}
else{
//return就直接返回了,没必要再用break了。
search :
for(k=3;k<=month;k++)
{
l1=l1+l2;
n++;
if(n==month){
//break search;
return l2;
}
l2=l1+l2;
n++;
if(n==month){
//break search;
return l1;
}
}
//我没仔细看你的逻辑,这个只是我随便加上去的。就是这里你没有加上返回值。
return l1;
}
}
}
复制代码
作者:
javamov
时间:
2013-8-26 03:25
代码跟你修改好了,结果也是对的。
至于你出错的地方楼上哥们说的很对。顶一个
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) + "只");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2