黑马程序员技术交流社区
标题:
return问题,在函数返回的时候有点搞不懂了
[打印本页]
作者:
め白衬衫
时间:
2014-10-7 22:13
标题:
return问题,在函数返回的时候有点搞不懂了
这是一个求1-100之间素数的代码,在判断函数是否是素数的函数里,我有点想不通为什么,在循环里面写上return,编译时还是提示缺少返还值
这是源代码
<p> //1~1000之间的素数
public class Prog2{
public static void main(String[] args){
int count = 0;
//统计素数个数
for(int i=1;i<1000;i++){
if(panDuan(i)){
count++;
System.out.print(i+" ");
if(count%10==0){
System.out.println();
}
}
}
System.out.println();
System.out.println("在"+1+"和"+1000+"之间共有"+count+"个素数");
}
//判断素数
private static boolean panDuan(int n){
boolean flag = true;
if(n==1)
flag = false;
//return false;
else{
for(int i=2;i<Math.sqrt(n);i++){
if((n%i)==0 ){//|| n==1
flag = false;
//return false;
break;
}
else
flag = true;
//return true;
}
}
return flag;
}
}
</p><p> </p>
复制代码
作者:
め白衬衫
时间:
2014-10-7 22:16
private static boolean panDuan(int n){
//boolean flag = true;
if(n==1)
//flag = false;
return false;
else{
for(int i=2;i<Math.sqrt(n);i++){
if((n%i)==0 ){//|| n==1
//flag = false;
return false;
break;
}
else
//flag = true;
return true;
}
}
//return flag;
}
复制代码
这个是我改过之后的有点小问题,为什么else那里还缺少返还值啊
作者:
め白衬衫
时间:
2014-10-7 22:18
return返还值在循环中,如果直接return值了,在循环外面还需要return吗?
作者:
め白衬衫
时间:
2014-10-7 22:26
class Text1
{
public static void main(String[] args)
{
int y=panDuan(2);
System.out.println("y="+y);
}
public static int panDuan(int x){
for(int i=0;i<9;i++){
if(i<5){
return x+1;
}
else
return 1;
}
}
}
复制代码
这个也是缺少返还值,why?
作者:
め白衬衫
时间:
2014-10-7 22:28
第18行提示缺少返回语句
作者:
水竹
时间:
2014-10-7 22:36
め白衬衫 发表于 2014-10-7 22:28
第18行提示缺少返回语句
那个for循环错了。
你循环里面写个if怎么样,就返回什么什么,然后else返回什么,循环还起什么作用,非此即彼啊,循环体只执行了一次就返回了。
作者:
tiancairc
时间:
2014-10-7 22:40
返回值有问题,
作者:
tiancairc
时间:
2014-10-7 22:44
private static boolean panDuan(int n){
21. boolean flag = true;
22. if(n==1)
23. flag = false;
24. //return false;
25. else{
26. for(int i=2;i<Math.sqrt(n);i++){
27. if((n%i)==0 ){//|| n==1
28. flag = false;
29. //return false;
30. break;
31. }
32. else
33. flag = true;
34. //return true;
35. }
36. }
37. return flag;
38. }
这段代码中,由于有条件分支判断, //return false中的//需要去掉,而最后一个return flag是多余的。所以才会报错
作者:
会飞的蜗牛
时间:
2014-10-7 22:51
panDuan方法中编译器并不确定是否执行for循环(比如,for(int i =0;i<0;),所以他会要求你必须有return。有什么不懂继续问。求技术分。求黑马币
作者:
tiancairc
时间:
2014-10-7 23:00
感觉是花括号或者return出了问题,写代码记得缩进,改写的括号不要省略了。
public class Prog2{
public static void main(String[] args){
int count = 0;
//统计素数个数
for(int i=1;i<1000;i++){
if(panDuan(i)){
count++;
System.out.print(i+" ");
}
if(count%10==0){
System.out.println();
}
System.out.println();
System.out.println("在"+1+"和"+1000+"之间共有"+count+"个素数");
}
//判断素数
private static boolean panDuan(int n){
boolean flag = true;
if(n==1){
flag = false;
//return false;
}else{
for(int i=2;i<Math.sqrt(n);i++){
if((n%i)==0 ){//|| n==1
flag = false;
//return false;
break;
}
}else{
flag = true;
//return true;
}
return flag;
}
}
看看这段可以运行了不
作者:
wtjohn
时间:
2014-10-7 23:00
{:3_54:} return直接退出当前方法了,在循环外部补一个return 应该没什么影响吧
作者:
zz_job
时间:
2014-10-7 23:39
晕。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2