Topic: 帮我看看这段代码的问题 (missing return statement)

  Print this page

1.帮我看看这段代码的问题 (missing return statement) Copy to clipboard
Posted by: cjy
Posted on: 2004-09-02 20:16

各位高手:我又有问题来讨教了,希望你们不要烦才好。谁叫我才开始学呢!
代码如下:
class CEquation
{
  int i;
  int getI()
  {
    for(i=0;i<=9;i++)
     if((3*10+i)*8256==(i*10+3)*6528)
     return i;
  }
  void print()
  {
    System.out.println("i="+getI());
  }
}
public class Equation
{
  public static void main(String[] args)
  {
    CEquation e=new CEquation();
    e.print();
  }
}
本来我预计使得式子(3*10+i)*8256==(i*10+3)*6528成立的i应为4,所以应输出i=4的,谁知编译时却报如下错误:
\Equation.java:5: missing return statement
  {
^
请问是为什么?谢谢了。

2.Re:帮我看看这段代码的问题 [Re: cjy] Copy to clipboard
Posted by: why
Posted on: 2004-09-02 22:04

错误信息已经清楚吧。
试想想 (3*10+i)*8256 根本不会等如 (i*10+3)*6528,getI() 会不会 return呢?

3.Re:帮我看看这段代码的问题 (missing return statement) [Re: cjy] Copy to clipboard
Posted by: yung
Posted on: 2004-09-02 22:25

一旦 if 不成立,则无返回值!你写的不严密。

4.Re:帮我看看这段代码的问题 (missing return statement) [Re: cjy] Copy to clipboard
Posted by: booolee
Posted on: 2004-09-03 10:08

int getI()
{
for(i=0;i<=9;i++)
if((3*10+i)*8256==(i*10+3)*6528)
return i;
}

修改为
int getI()
{
for(i=0;i<=9;i++)
if((3*10+i)*8256==(i*10+3)*6528){
return i;
}
return -1; //保证无论程序运行时的状态,都会有一个返回值
}

5.Re:帮我看看这段代码的问题 (missing return statement) [Re: cjy] Copy to clipboard
Posted by: cjy
Posted on: 2004-09-06 16:26

对不起各位,前两天密码丢失,没有回复各位。
先说确实如yung所说,我这个程序不严密,如果if不成立就要报错。先谢过给我指出错误之处。不过我这是在用一道数学题练手,所以方程一定有解。我看了booolee兄的回贴,试了一下没有报错,但是不是我预计的结果,也不是方程的结果。所以我自己试着改了下。把
int getI()
{
for(i=0;i<=9;i++)
if((3*10+i)*8256==(i*10+3)*6528)
return i;
}
改为了:
int getI()
{
for(i=0;i<=9;i++)
if((3*10+i)*8256==(i*10+3)*6528)
break;
return i;
}
就得到了预想的结果,我想问的是在原程中当for中i循环到i=4时,if的条件就成立了,那么就应执行return i,但为什么却没有执行?而是继续循环,使得return i没有执行,所以报错。当我中断循环后,就可以return正确的i值了。
希望各位能解我的疑惑,在这儿先谢过了。

6.Re:帮我看看这段代码的问题 (missing return statement) [Re: cjy] Copy to clipboard
Posted by: jerry010
Posted on: 2004-09-06 18:08

缺少返回值是编译期错误,不是运行期错误,也就是还没有开始运行。我想确定一下,第二段程序加上括号是不是这样?
int getI()
{
for(i=0;i<=9;i++){
if((3*10+i)*8256==(i*10+3)*6528)
break;
}
return i;
}

7.Re:帮我看看这段代码的问题 (missing return statement) [Re: cjy] Copy to clipboard
Posted by: why
Posted on: 2004-09-06 19:28

iint getI() {
int i; // should declare local variable i
for(i=0;i<=9;i++) {
if((3*10+i)*8256==(i*10+3)*6528) {
break;
}
}
return i;
}


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923