`
guyinglong
  • 浏览: 73895 次
  • 性别: 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注入,虽然方法并不正统,但也提供了一种思路。

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

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

相关推荐

    C#入门制作第一个程序hello world的演示flash

    `class HelloWorld`定义了一个名为HelloWorld的类,`static void Main()`是C#程序的主入口点,程序的执行从这里开始。`Console.WriteLine("Hello, World!");`则是在控制台输出“Hello, World!”。 然而,本教程提供...

    深入淺出 Hello World

    "Hello World"程序是一个简单的输出“Hello World!”的程序,通常用于教学和演示语言的基本语法。文章作者Jim Huang(黄敬群,又名jserv)是一位对Linux有深厚理解的专家,他通过这个简单的程序,引导读者深入理解...

    变幻七彩HELLO WORLD!

    T可能代表启动颜色变换,这将开始一个循环,不断改变“HELLO WORLD!”文本的颜色。P可能意味着持续进行颜色变换,用户可以按下此键以保持颜色的连续变化。而Q可能是退出命令,用户可以通过输入这个键来停止程序并...

    01-android 4.0 入门配置以及HelloWorld程序讲解

    这里我们将深入探讨"01-android 4.0 入门配置以及HelloWorld程序讲解"的相关知识点,带你走进Android开发的世界。 首先,让我们从Android 4.0(也称为Ice Cream Sandwich,简称ICS)开始。这是Android操作系统的一...

    100-ways-to-print-HelloWorld-in-java-master_helloworld_

    这个名为 "100-ways-to-print-HelloWorld-in-java-master_helloworld_" 的项目显然是一个有趣的挑战,旨在探索使用Java语言打印 "Hello, World!" 的一百种不同方法。下面我们将深入探讨这个主题,详细介绍各种可能的...

    OpenGL = Hello World

    "OpenGL = Hello World" 这个标题暗示我们将探讨如何使用OpenGL进行基础的图形渲染,这通常是从一个简单的“Hello World”程序开始的。 在计算机编程中,“Hello World”程序是一个传统的起点,用于展示语言的基本...

    hello world

    }void hello()` 这一行,将 `main` 宏定义为一个新的函数体,其中包含一个嵌套的 `main` 函数和一个名为 `hello` 的函数声明。 2. 当预处理器遇到 `void main()` 时,由于已经有了 `main` 的宏定义,它会用宏展开后...

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

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

    14迎新晚会-“helloworld”策划书(725).docx

    2. **加强师生互动**:晚会提供了一个平台,让新生有机会与教师、学长学姐面对面交流,解答他们在学习、生活上的疑惑。 3. **弘扬学院精神**:展示信息科学与技术学院的学术氛围和特色,激发新生对专业知识的兴趣和...

    Hello World! Computer Programming for Kids and Other Beginners

    本书通过实例向读者展示了如何编写和运行第一个“Hello World!”程序,这是所有编程教程中的经典开场白。此外,还涵盖了当程序出错时应如何排查和解决问题的技巧。 #### 4. 运行第一个程序 跟随本书的指引,学习者...

    6个变态的C语言Hello World程序

    这些“变态”的Hello World程序虽然在实际开发中并不常见,但它们提供了一个有趣的视角,让我们看到C语言的强大和灵活性。学习这些程序可以帮助我们更好地理解C语言的底层机制,包括预处理器、内存操作、位运算和...

    HelloWorld:这是一个测试

    【标题】"HelloWorld: 这是一个测试"的项目,通常在编程初学者中非常常见,它是用来演示程序的基本结构和运行流程的简单程序。在IT领域,"Hello, World!"程序是学习新编程语言的第一步,它标志着你的编程旅程的开始...

    表面叫hello world,其实我是飞行棋

    标题中的“表面叫hello world,其实我是飞行棋”暗示了一个有趣的编程项目,它结合了C#编程语言的基础教学——通常入门者都会从打印"Hello, World!"开始——与一个经典的游戏,飞行棋。这个项目可能是为了使学习过程...

    HelloWorld:任何有趣的事

    从压缩包文件名称"HelloWorld-master"来看,这很可能是一个开源项目或教程的源代码仓库,其中可能包含了多个文件和目录,用于展示如何使用HTML以及其他可能的技术(比如CSS和JavaScript)来创建有趣的网页或应用。...

    The-program-of-Hello_World.rar_world

    public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 这里我们看到,Java程序需要定义一个公共类,并在`main`方法中输出字符串。 3. **Python的...

    Another Hello world_python_

    标题 "Another Hello world_python_" 暗示我们将讨论的是一个基础的 Python 编程概念,通常初学者在接触编程时会通过"Hello, World!"程序来入门。在这里,"Another"可能意味着我们要探讨的是与“Hello, World!”类似...

    brainfuck-cool-helloworld-:我是无聊的

    【标题】"brainfuck-cool-helloworld-"是一个与编程语言相关的项目,可能是一个挑战或学习实践,其中"cool"和"helloworld"暗示了它可能是用Brainfuck语言编写的一个有趣的"Hello, World!"程序示例。"我是无聊的"可能...

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

    接下来,我们可以进一步将这个简单的程序转变为一个小游戏,例如一个简单的笑脸动画。首先,定义一个表示运动点的结构体`struct move_point`,包括位置和速度。然后,利用`gotoxy()`函数改变光标位置,用空格擦除...

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

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

    使用Eclipse调试Java程序代码

    3. 图 3 调试 HelloWorld:在第一个断点执行被暂停。 通过以上步骤,您已经学会了使用 Eclipse 调试 Java 程序代码,包括创建 Java 项目、创建 Java 类、运行 Java 程序和调试 Java 程序等步骤。

Global site tag (gtag.js) - Google Analytics