小测试,没有什么意义,只是无聊.

axman
博客专家认证
2008-09-19 01:51:08
java中如何处理下面的逻辑:

if(条件1){
语句1
语句2
语句3
}
if(条件2){
语句1
语句2
语句3
}
if(条件3){
语句1
语句2
语句3
}

现在把
语句1
语句2
语句3
写到一个地方,让上面的条件直接goto到那里.
...全文
181 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZangXT 2008-09-19
  • 打赏
  • 举报
回复
我要再认真学学,好好理解.
axman 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ZangXT 的回复:]
引用 8 楼 axman 的回复:
这个问题其实真正编码的时候经常用到.就是把很多重复操作提取为了一个方法.

但是提取方法如果用到很就是,就要把变量一个一个传过去,过一会发现又少传了一个变量,又回过头来重新给方法加参数.
就是说外部就是如果很多,就要定义很多参数,比如关闭rs,stmt,conn,就要把这三个变量传给提取的共用的方法.
每次if(ccc) close(rs,stmt,conn);如果参数很多和多次写语句差不多了.

其实我们都知道jav…
[/Quote]

是在循环之前啊,但break到那个标号就是跳出了循环.

public static void main(String[] args) throws Exception{
 label1:
 do{
  if(1==1) break label1;
  System.out.println(111);
 }while(false);
 System.out.println(222);
}
axman 2008-09-19
  • 打赏
  • 举报
回复
都已经说了,如果没有太多的变量,可以提取为方法.但如果要操作太多的变量,就要把这些方法都作为参数传过去,有时要反复修改参数的个数.
如果在原来的地方直接操作就不要需要传参数.

比如:

public static void main(String[] args) throws Exception{

if(1==1){跳过System.out.println(111),直接操作System.out.println(222);}
System.out.println(111);



System.out.println(222);
}
改成:
public static void main(String[] args) throws Exception{
label1:
do{
if(1==1) break label1;
System.out.println(111);
}while(false);
System.out.println(222);
}
就很方便地跳过下面的操作.
ZangXT 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 axman 的回复:]
这个问题其实真正编码的时候经常用到.就是把很多重复操作提取为了一个方法.

但是提取方法如果用到很就是,就要把变量一个一个传过去,过一会发现又少传了一个变量,又回过头来重新给方法加参数.
就是说外部就是如果很多,就要定义很多参数,比如关闭rs,stmt,conn,就要把这三个变量传给提取的共用的方法.
每次if(ccc) close(rs,stmt,conn);如果参数很多和多次写语句差不多了.

其实我们都知道java可以break到一个label,但那要…
[/Quote]
我考虑过类似的方法,不过java的标号只允许在循环之前吧.
良言相告 2008-09-19
  • 打赏
  • 举报
回复
代码重构,提取公用方法不就得了
chaowendao 2008-09-19
  • 打赏
  • 举报
回复
哎,复杂问题简单化哦!
axman 2008-09-19
  • 打赏
  • 举报
回复
这个问题其实真正编码的时候经常用到.就是把很多重复操作提取为了一个方法.

但是提取方法如果用到很就是,就要把变量一个一个传过去,过一会发现又少传了一个变量,又回过头来重新给方法加参数.
就是说外部就是如果很多,就要定义很多参数,比如关闭rs,stmt,conn,就要把这三个变量传给提取的共用的方法.
每次if(ccc) close(rs,stmt,conn);如果参数很多和多次写语句差不多了.

其实我们都知道java可以break到一个label,但那要在循环中,可是我们这样的逻辑不在循环中如何break呢?

赵本山大叔说:"没有困难创造困难也要上".本着这个精神,我们就要造循环.但造的这个循环只是循环的架子,实际上没有循环:

for(int i=0;i<1;i++){

if(t1) break label1;
........;
if(t2) break label1;
........;
}
label1:
stmt1;
stmt2;
stmt3;
stmt4;

简单说你只要做一个一次循环就达到了goto的目的.

do{
if(t1) break label1;
........;
if(t2) break label1;
........;
}while(false);
或者
while(true){
if(t1) break label1;
........;
if(t2) break label1;
........;
break;//最后加一个break来保证只循环一次.
}

axman 2008-09-19
  • 打赏
  • 举报
回复
你的意思是对的.但上面说了不能提取成函数,只允许用流程控制.
if (条件1 || 条件2 || 条件3){
语句1
语句2
语句3
}
是错误的,因为条件中还要执行其它语句.

比如建立一个连结.
Connection conn = getConnection();

然后我做具体的几步操作.
第一步条件不满足,则直接执行关闭连结,下面的就不用做了.
如果满足,做第二步,如果条件不满足,直接关闭连结就不做第三步了.
if (条件1 || 条件2 || 条件3)要把三步都做了才能用||.没有达到goto的作用,goto是直接跳过下面的操作.
nuskwill 2008-09-19
  • 打赏
  • 举报
回复
你把语句1,2,3写到一个函数里,再在对应条件下调用这个函数就是了.是这个意思吗?
justinavril 2008-09-19
  • 打赏
  • 举报
回复
Why????


if (条件1 || 条件2 || 条件3){
语句1
语句2
语句3
}



Maybe different things happen in different conditions...
axman 2008-09-19
  • 打赏
  • 举报
回复
简单说实现这样的功能:

if(t1) goto labelx;
其它语句
if(t2) goto labelx;
其它语句
if(t3) goto labelx;

labelx:
stmt1;
stmt2;
stmt3;
stmt4;

不要提取成方法,用流程控制
hahaso 2008-09-19
  • 打赏
  • 举报
回复
貌似楼主是说将3个重复的块提取出来变成
here:
function 1;
function 2;
function 3;
if(a){
goto here;
}
if(b){
goto here;
}
if(c){
goto here;
}
liuqianqian 2008-09-19
  • 打赏
  • 举报
回复
到哪里呀!楼主能不能说清楚啊!
hunzaidalian 2008-09-19
  • 打赏
  • 举报
回复
么意思?

62,635

社区成员

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

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