幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4307|回复: 11

[java]返回问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-9-14 12:12:48 | 显示全部楼层 |阅读模式
public class HelloWorld{
    int biggest(int x,int y,int z){
        
        if(x>y){
            if(x>z)
              return x;
        }
        else if(y>z){
            if(z>x) return y;
            
        }
        else return z;
        
    }
    public static void main(String[] args){
        HelloWorld aaa=new HelloWorld();
        int answer=aaa.biggest(10,20,30);
        System.out.println("最大数="+answer);
    }
}
为什么这样写会显示缺少返回语言呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-9-14 18:06:41 | 显示全部楼层
超強大的錯誤
請LZ數數大括号的數目,看看main是在那兒

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-9-15 10:44:39 | 显示全部楼层
括号没打少啊? 不是到了RETURN 程序就结束了吗?
不过改成如果X比Y大的时候用一个变量接收,最后再RETURN就可以,为什么呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-9-15 12:56:54 | 显示全部楼层
括號沒打少但位置錯了,main應該在class以外

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-9-15 13:50:21 | 显示全部楼层
不会吧,java中,main方法可以脱离class单独存在么?
え~え~お!!!
回复 支持 反对

使用道具 举报

18

主题

428

帖子

5260

积分

⑦老手

在美工荒中挣扎的全能

积分
5260
QQ
发表于 2007-9-15 13:56:42 | 显示全部楼层
和那无关,似乎Java的main必须在一个类中。

Java的语法可能比较严吧,必须要有一个不受条件判断限制的return。
应该是为了避免函数万一没有返回值的情况。(编译器不可能去判断你的条件判断是否已经覆盖了所有的可能性)
LZ试试在biggest的最后加一个return 0;
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-9-16 00:42:25 | 显示全部楼层
正如楼上M所说,找一个条件可以最终查找到无返回的情况,因为两个if 连续判断才得到一个return,势必存在条件没有调用该return,这样的结果是这个if没有完成返回,而不会进入剩下所有的ELSE,估计楼主可能本来希望出错的数据都归入到最后一个ELSE中,却并不是如此——

这样以来WARNING就变成了语意上的检查,确保程序尽可能在编译的时候就发现问题——类似的比如没有初始化等

不过这不是JAVA的特权,C和C++下面你把/W开到3或者4或者X都可以提示返回缺少的——
Style-C
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-9-16 00:45:05 | 显示全部楼层
如果觉得上面太琐碎,楼主自己举个例子:
Z > X > Y 即可——
Style-C
回复 支持 反对

使用道具 举报

18

主题

428

帖子

5260

积分

⑦老手

在美工荒中挣扎的全能

积分
5260
QQ
发表于 2007-9-16 09:34:51 | 显示全部楼层
……呃,典型的x86体系是吧return值压栈吧。
如果没压,而调用方取了返回值会出错么?
还是编译器会自动补上一个什么东西……?

而C/C++有些编译器没有捕捉的麻烦最终会通过硬件特性反映出来。
但不管怎么说,Java应该是不能允许出现类似野指针、未定义状况这些东西的。
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-9-16 12:31:05 | 显示全部楼层
RETURN部分没有压栈操作,只是根据栈内的第一个数据进行返回(跳转到XX地址),另外返回值也是进入之前就协定好了(VC通常是EBP的下一个参数+4),那么如果真的没有任何对返回值有操作,那么就是原来进入的时候的返回值,在VC编译器DEBUG情况通常会得到类似于0XCCCCCCCC的错误值可以立即发生问题(除非纯粹看看……),返回结构通常会被转化,本质上就是返回一个VOID了,结构另外方式存放——

[硬件特性] 偶则不懂什么意思? [s:3]
类似于VB这类会默认把数值设置为0,有时候是不错,但是会培养不初始化的坏习惯,特别是间隔比较长时候修复的时候会很难抓虫子,个人理解以上。。。
Style-C
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-18 08:56 , Processed in 0.026273 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表