4行代码看谁能写出更简单的写法

liuhaochuan 2008-01-16 03:22:52
这是段反编译的代码,经过我简化,但结构不变.
void foo(int a,int b,int c)
{
int k = b;
if( a == 0) goto _L2; else goto _L1
_L1:
k++;
_L2:
if(k < c) goto _L1; else goto _L3
_L3:
return;
}

我还原成java 写成
void foo(int a,int b){
int k = b;
if(a==0) {
while(k<c) { k++; }
}
else
{
do{ k++; }while(k<c)
}
}

我相信原始的代码肯定没有这么复杂,有人能给出最优的解法吗?
...全文
436 点赞 收藏 30
写回复
30 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
JavaLover00000 2008-01-17
学习~~~
回复
阿非 2008-01-17
学习~
回复
insiku 2008-01-17
你的反编译工具真垃圾
回复
visulcer 2008-01-17
可能是文件被混淆过的
这样不知道对不对?

void foo(int a, int b, int c) {
int k = b;
if (a != 0) {
k++;
}
while (k < c) {
k++;
}
}
回复
daniel_kaka 2008-01-16
给你带个返回值

int foo(int a,int b,int c){
int k = b;
for(k=(a!=0?k+1:k); k<c; k++){
}
return k;
}
回复
hanfengthinker 2008-01-16
帮顶了
回复
daniel_kaka 2008-01-16
抱歉,前面写错了点~

void foo(int a,int b,int c){
for (int k=(a!=0?b+1:b); k<c; k++){
}
}
回复
daniel_kaka 2008-01-16

public static void foo1(int a,int b,int c){
for ( int k = b; k < c; k = (a!=0?(k+1):k)){
}
}
回复
syhan 2008-01-16
也可以是递归呵
回复
大海Online 2008-01-16
public static int foo(int a, int b, int c) {
int k = (a == 0) ? b : b + 1;
while (k < c) k++;
return k;
}

或者:

public static int foo(int a, int b, int c)
{
int k;
for(k = a == 0 ? b : b + 1; k < c; k++);
return k;
}
回复
Dan1980 2008-01-16
回复16楼:

int foo2(int k) {
//do something
}

int foo(int a, int b, int c) {
int k = b;
if (a!=0)
foo2(k++);
while (k<c) foo2(k++);
return k;
}
回复
shan1119 2008-01-16
目前没有什么想法了.还是想办法解决楼主的问题吧,我是使不上劲了.
回复
janewayne 2008-01-16
private static void foo1(int a,int b,int c){
int k = b<c?c:(a==0?b:b+1);
System.out.println(k);
}
回复
healer_kx 2008-01-16
被MS BS不算什么,说明他们暂时不想弄Java。继续努力,直到有一天MS收购了SUN,你再去。。。
回复
liuhaochuan 2008-01-16
我并不是要简单的取得一个返回值,这样吧我再改一下题目

//反编译代码如下:
int foo2(int k)
{
...do something
}

int foo(int a,int b,int c)
{
int k = b;
if( a == 0) goto _L2; else goto _L1
_L1:
foo2(k);
k++;
_L2:
if(k < c) goto _L1; else goto _L3
_L3:
return k;
}

//我手动还原后的代码如下:
int foo2(int k)
{
...do something
}

int foo(int a,int b,int c)
{
int k = b;
if(a==0)
{
while( k < c )
{
foo2(k);
k++;
}
}
else
{
do
{
foo2(k);
k++;
}while(k < c);
}
return k;
}

我相信原始的代码没有这么复杂 请教各位更优的解法
回复
shan1119 2008-01-16
楼上的也去了?
回复
Slugfest 2008-01-16
老比尔是谁? 此话怎讲? 你去MS面试被BS了?
回复
shan1119 2008-01-16
好象是只有循环的情况下才会出现 goto
回复
liuhaochuan 2008-01-16
在源代码里肯定是有循环的,我只是想不明白它是怎么跳到循环内部的.
回复
shan1119 2008-01-16
甘草啊,要是老比尔有你这等眼光就好喽. ^_^
回复
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2008-01-16 03:22
社区公告
暂无公告