`
guyinglong
  • 浏览: 71812 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

一个有趣的HelloWorld程序

阅读更多
相信广大程序员朋友们对Hello World程序一定不会陌生,也不知道谁这么有才,发明了这么经典的句子,以至于各种语言、技术都有相应的Hello World版本。

今天看到JavaEye上有人出了这样一道题,表面上看起来似乎不难,但是对于JAVA基础不好的人来说,还真是有点难度的。请看题目:

public class Test{

public static void main(String[] args){
try {

if(){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

以上程序,在不新建类和方法的情况下,在if()里面加代码,使程序编译运行通过,输出Hello world!

如果给你5分钟时间,你能想出几个方案呢?

看到题后,首先分析if…else语句只能执行一个,如果要打印出Hello world!else语句块中就必须要执行,并且if()语句中还必须要有打印Hello的功能。所以在if()里添加代码时,需要符合两个条件:一是能够打印”Hello “,二是返回值为false。

综合考虑之后,就有了第一个解决方案:

...
if (System.out.printf("Hello")==null){
...


java中具有打印功能的语句并不多,能立马想到的就是System.out.print(“xxxx”)了,但是这个print()方法没有返回值,由此就想到了printf,它的返回值是PrintStream类型。

熟悉System用法的人应该还知道,不仅仅只有printf方法满足,还有append()和format()。

如果你不熟悉System的用法,那么是不是没有辄了呢。你应该会想到匿名内部类。虽然说题目要求不新建类和方法,但是匿名内部类比较特殊,应该说基本上满足要求把。那么就有了下面的解法:

...
if(new Object(){{System.out.print("Hello ");}}==null ){
...


如果你非常熟悉匿名内部类的话,这种解法自然是最简单不过了。

如果你对匿名内部类也不熟悉,怎么办呢?如果你熟悉反射的原理也行。下面就是利用java反射机制构造的一种解法:

...
if(System.out.getClass().getMethod("print",String.class).invoke(System.out, "Hello ")!=null){
...


网上大师们的解法还有很多,比如:
1.
if (args.length == 0 ? new Object() {
boolean f() {
HelloWorld.main(new String[2]);
return false;
}
}.f() : true) {
System.out.print("Hello");
} else {
System.out.print(" world!");
}

2.
if(args.length == 0 ? Test.class.getDeclaredMethod("main",args.getClass()).invoke(new Test(), new Object[]{new String[]{"a"}}) != null : true){
System.out.print("Hello ");
}else{
System.out.println("world!");
}

3.
public class Test{
public static void main(String[] args){
try {
if (new RuntimeException(){
boolean n(){
switch(getStackTrace().length){
case 3:
return false;
case 4:
return true;
default:
printStackTrace();
throw this;
}
}
public void printStackTrace(){
main(null);
};
}.n()) {
System.out.print("Hello ");
} else {
System.out.println("world!");
}
} catch(Exception e) {
e.printStackTrace();
}
}
}

如果你一点思路都没有,这里还有一个投机取巧的例子:

if(true)System.out.print(”Hello world!”); else if(false){
System.out.print(”Hello “);
}else{
System.out.println(”world!”);
}

以上代码类似于SQL注入,虽然方法并不正统,但也提供了一种思路。

到这里为止,已经介绍了不少方法了,虽然这些方法并非本人所创,而是大家集思广益所得,我只不过是负责搜集整理而已。但是在搜集整理的过程中,我发现一个现象,那就是当一个问题被一个人解决之后,其他类似的或者说更完善更高级的想法接踵而至,迅速地由点发射出无数根线,或许这就是传说中的发散思维吧!

好了,不多说了,该洗洗睡了!
分享到:
评论

相关推荐

    第一个 Swift 程序,输出经典演示程序 Hello,World! ,当然,也是第一个 Swift 引用注释说明

    Swift 是一种强大直观的编程语言,适用于所有 Apple 平台。Swift 语法简洁但表现力强,可轻松上手使用。...那么第一个 Swift 程序,输出经典演示程序 "Hello, World!" ,是每一个学习Swift语言必学的第一个编程程序。

    hello-wcet:Patmos helloworld 包括 WCET 分析步骤

    我们首先像这样编译和链接 helloworld 程序: patmos-clang -o hello.elf hello.c 使用 Patmos 模拟器pasim执行二进制文件会做我们期望它做的事情: pasim hello.elf # (make run) Hello world. 为了使 hello...

    dropwizard-hello-world-gradle:dropwizard Hello World应用程序,使用gradle而不是maven实现

    这将生成一个胖子,您可以使用它来运行。 要运行该文件,请在根目录中执行以下命令: java -jar build/libs/dropwizard-hello-world-gradle-all.jar server ./src/main/resources/hello-world.yml 这将以服务器...

    hello.ll:以LLVM语言为OS X实现Hello World程序的几种方法

    在这里,我演示了几种以LLVM语言为OS X实现Hello World程序的方法。 与C标准库链接至少获得write()和exit()函数。 这是最简单的方法,但是添加了不必要的libc依赖关系。 这很无聊=) 实现您自己的最小标准库(例如...

    windows 程序设计

    用户可在屏幕上移动窗口,改变它们的大小,在不同程序间切换,并从一个程序向另一个程序传送数据。因为这些窗口看起来有些像桌面上的纸(当然,这是计算机还未占据办公桌之前的年代),Windows有时被称作:一个显示...

    为您的Java应用瘦身

    看看我们的HelloWorld最小能多小。 jre带的很多文件可能在你的程序里并不需要,或者你的程序只需要某个几兆大的jar里面的一个class。所以,理论上我们可以对jre进行减肥运动。把你不需要的jar和文件删掉,剩下的...

    c语言实验--hello程序改进1

    摘自网友的程序,我进行了仔细的整理,用于c语言的实验教学,在此感谢。 通过对hello程序的一步步改进,进而更有趣的学习枯燥的c语言。

    hellogeneticalgorithm:进化为生成“ Hello World”的遗传算法

    该项目包含一个的实现,该允许使用非常简单的遗传算法从随机字符串中演化出文本。 该实现以F#完成,F#是一种非常适合此类问题的功能语言。 为了使该项目更加有趣,我们已经从控制台应用程序(不是很困难)和ASP...

    dropfulgwt:带有 RestyGWT 前端的 Dropwizard 后端的 hello world 示例

    Dropwizard 是一个非常有趣的“生产就绪堆栈”。 我创建了这个示例,因为我想看看使用可运行的 JAR 创建和捆绑 GWT 应用程序是多么容易。 它包含一个稍微修改过的 dropwizard 入门示例版本,以及一个使用此 API 的...

    Rust 基础系列1 创建并运行你的首个 Rust 程序.docx

    安装完成后,打开你的命令行工具,输入以下命令来创建一个新的 Rust 项目: cargo new my_first_rust_program 这将在当前目录下创建一个名为 my_first_rust_program 的新目录,里面包含了一个简单的 Rust 项目结构...

    Scratch语言教程及案例.docx

    在Scratch中,Hello World可以是一个简单的脚本,使角色说出一些文本。请按照以下步骤操作: 1. 打开Scratch编程界面([Scratch网站](https://scratch.mit.edu/))。 2. 创建一个新的项目。 3. 选择角色,然后在...

    gatsby-starter-linting:具有单个hello world组件和一些代码质量检查工具的Gatsby入门程序

    产品特点只有一页只有一个虚拟组件用于.js和.jsx Airbnb配置进口分拣更漂亮和有趣的整合更漂亮的格式设置JSON,YAML,Markdown 与react-test-renderer开玩笑沙哑和皮棉预提交棉绒,格式化和测试

    Python 编程基础:深度解析

    然而,还有一个鲜为人知的小技巧:Python 内置了一个 __hello__ 模块,导入后会自动打印出 “Hello world!”: import __hello__ 虽然这不是标准的输出方式,却是一个有趣的彩蛋。 Python 版本 确认 Python 版本的...

    Hello-World-Scheduler

    #[Hello, World] 待办事项列表 [Hello, World] 待办事项列表是一个交互式调度程序,允许用户... [Hello, World] 待办事项列表是一个有趣的交互式网络应用程序,可帮助个人更好地跟踪他们的职责。 ###线框 ###站点地图

    EFChallenge:使用 Famo.us 框架的 Hello World

    它也很容易理解,我花了大约一个周末来学习基础知识,并且基本掌握了基础知识。 我意识到的另一件事是 famo.us 和 Angular 配合得很好,这种组合在未来会被证明是非常棒的。 我发现 famo.us 的命令式

    hello-proximity-cordova:你好,CordovaPhoneGap ProximityKit 插件的 World 应用程序

    设置该项目包含在 iOS 和 Android 上构建“Hello Beacon”Cordova 应用程序运行版本所需的一切,但有一个例外: 您必须安装自己的ProximityKit.plist和ProximityKit.properties文件! 否则该应用程序将无法识别您的...

    -:一个完全的小白,怎么样少走弯路

    但是也很复杂,想想各位在大学的第一堂实践课,编写一个hello world程序有多难。我就希望后来的人不要走那么多弯路,抓紧看到编程由于我第一门学习到的是c语言,我就拿c语言本身。首先是第一门实践课,100 %的老师...

    BrainFuck编程语言

    hello.txt HelloWorld程序 up.txt 这个程序将你的输入(小写字母)转换为大写(回车结束) add.txt 这个程序对两个一位数做加法,并输出结果(如果结果也只有一位数的话)(例如:输入2+3) mul.txt 这个程序对两...

    Visual.C#.编程精彩百例

    实例60 一个有趣的DOS实用程序 实例61 代表元基本应用 实例62 有趣的事件代表元 实例63 随机连续偶数发生事件处理 实例64 有趣的列表框窗体 实例65 数学函数应用 第3篇 Visual C#高级编程实例 实例66 文件夹...

Global site tag (gtag.js) - Google Analytics