一个中午对战if-else你想不到的结果

           今天中午,同学问我一个问题,题目很简单,但是我却折腾了一个中午。最后还是在谷歌的帮助下找到了答案,那个纠结啊,通过这个题目也可以看出自己在一些基础知识上的薄弱,贴出来,给大家看看,挺有意思的。

     题目是这样的:(可以尝试先做一下再看下面的答案)

请把美貌和智慧赋给同一个女人
上天从不把美貌和智慧赋给同一个女人。下面有一段代码,请你在空处填写一段代码,
使之打印出:“我很美!我也很有才!”
public static void main(String[] args){ 
if(____________________________){ 
System.out.print("我很美!  "); 
}else{ 
System.out.println("我也很有才!"); 
}  } 

    一看到题目,我第一的反应就是,你不是在坑我嘛,愚人节也过去了那么多天了,这个if-else语句我还是懂的啊,大一上学期的C语言就学过了,两个语句不可能同时执行啊,只要有一点点基础的人都知道,但是凭我对他的了解,他应该是认真的,所以我就想啊想,开始我的想法是用main方法中的String[] args,因为只有那个args可以操作啊,纠结了半个小时,也查了一些资料,最后还是放弃了,后面又想,既然if是条件判断语句,那应该就是在里面的条件那里做文章(这可是个热词)是否可以在条件里面就把前面if中的输出来,其实这个想法是正确的,但是由于其他的原因,还是没能得出正确的答案,此处略去一些东西,不说大家应该都懂,人艰不拆嘛,(∩_∩),就这样一个小时过去了,这个中午不能就这样费了啊,也没休息,下午的四节课是要跪的节奏啊,有时也是性格原因,要是找不出答案,哥哥下午的课就翘掉算了,既然自己搞不定,有时我们还是要有屈服的心理,放下我们的那一点所谓的臭架子,nin听一下别人的想法,我们又不吃亏,只要事先我们想过了就OK了,这种屈服是智者的屈服,我们的知识也有限,我们不懂可以学学别人嘛,看看别人是怎么做的,自己在这里死磕也没用,还把自己搞的心里烦躁。所以就百度了,开始也找不到,最后还是谷歌给力找到了类似的题目,一看答案真心觉得自己弱爆了,作者给出了六种解决的方法,可我一种方法都没想到,有的挨着边了,但是还是没写出来。

         下面给大家看看这神奇的六种方法。我觉得挺神奇的。

         

     上面的题目原题是这样的

           

问题如下:一个类HelloWorld,如下:
public class HelloWorld { 
  
    public static void main(String... a) { 
  
        if(你的代码) { 
  
            System.out.print("Hello,"); 
  
       } else { 
  
            System.out.println("World"); 
  
        } 
  
    } 
  
}
该类含有main方法,如何执行该main方法,让它打印出Hello,World,前提是只准在if条件里,即在 你的代码 处添加代码。

    经过搜集总结,可实现的方法如下:

  

 

(一)使用匿名内部类:
public class HelloWorld { 
  
    public static void main(String... a) { 
  
       if (new Object(){{System.out.print("Hello,");}} == null) { 
  
           System.out.print("Hello,"); 
  
       } else { 
  
           System.out.println("World"); 
  
       } 
  
    } 
  
}

  (二)利用PrintStreamappendformat等方法(append处改为format

 

 

 

public class HelloWorld { 
  
    public static void main(String... a) { 
  
       if (System.out.append("Hello,") == null) { 
  
           System.out.print("Hello,"); 
  
       } else { 
  
           System.out.println("World"); 
  
       } 
  
    } 
  
}

  ()利用反射调用System.out.print

  

public class HelloWorld { 
  
    public static void main(String... a) throws Exception { 
  
       if (System.out.getClass().getMethod("print",String.class).invoke(System.out, "Hello,")!=null) { 
  
           System.out.print("Hello,"); 
  
       } else { 
  
           System.out.println("World"); 
  
       } 
  
    } 
  
}

  ()利用反射调用main方法本身

  

public classHelloWorld{ 
  
    public static void main(String... a) throws Exception { 
  
       if (a.length == 0 ? HelloWorld.class.getDeclaredMethod("main",a.getClass()).invoke(new Test(), new Object[]{new String[]{"a"}}) != null : true) { 
  
           System.out.print("Hello,"); 
  
       }else { 
  
           System.out.println("World"); 
  
       } 
  
    } 
  
}

  变体

 

public class HelloWorld { 
  
    public static void main(String... a) throws Exception { 
  
       if (a == null ? true : ((HelloWorld.class.getMethod("main", newString[1].getClass()).invoke(new HelloWorld(),new Object[1])) instanceof Void)) { 
  
           System.out.print("Hello,"); 
  
       }else { 
  
           System.out.println("World"); 
  
       } 
  
    } 
  
}

  (五)利用jdk1.6的动态脚本

  

import javax.script.ScriptEngineManager; 
  
public class HelloWorld { 
  
    public static void main(String... a) throws Exception { 
  
       if (new ScriptEngineManager().getEngineByName("JavaScript").eval("print ('Hello,');")!=null) { 
  
           System.out.print("Hello,"); 
  
       } else { 
  
           System.out.println("World"); 
  
       } 
  
    } 
  
}

  (六)利用jdk1.5printf方法

public class HelloWorld { 
  
    public static void main(String... a) throws Exception { 
  
       if (System.out.printf("Hello,") == null) { 
  
           System.out.print("Hello,"); 
  
       } else { 
  
           System.out.println("World"); 
  
       } 
  
    } 
  
}

  看完这六个方法,你想到了几个,有些我们也许真的想不到,我能想到的也就只有第一个那样的形式的了,但是还是没有写出来,自己的基础知识真的太差了,还要加强。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值