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)
}
}

我相信原始的代码肯定没有这么复杂,有人能给出最优的解法吗?
...全文
467 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
甘草啊,要是老比尔有你这等眼光就好喽. ^_^
加载更多回复(10)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧