Quine--输出程序源码的程序(java)

Posted zhangdapao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quine--输出程序源码的程序(java)相关的知识,希望对你有一定的参考价值。

  今天看到一个很有意思的问题,如何输出一个程序自己的源码,看到这个问题的第一反应自然是读取源码文件,然后逐行输出即可。

  但是,如果加上限制条件不能读取文件呢?

  emmm...思考许久之后,WIKI解救了我,以下内容皆摘自wiki。先上源码。

public class Quine
{
  public static void main(String[] args)
  {
    char q = 34;      // Quotation mark character
    String[] l = {    // Array of source code
    "public class Quine",
    "{",
    "  public static void main(String[] args)",
    "  {",
    "    char q = 34;      // Quotation mark character",
    "    String[] l = {    // Array of source code",
    "    ",
    "    };",
    "    for(int i = 0; i < 6; i++)           // Print opening code",
    "        System.out.println(l[i]);",
    "    for(int i = 0; i < l.length; i++)    // Print string array",
    "        System.out.println(l[6] + q + l[i] + q + ‘,‘);",
    "    for(int i = 7; i < l.length; i++)    // Print this code",
    "        System.out.println(l[i]);",
    "  }",
    "}",
    };
    for(int i = 0; i < 6; i++)           // Print opening code
        System.out.println(l[i]);
    for(int i = 0; i < l.length; i++)    // Print string array
        System.out.println(l[6] + q + l[i] + q + ‘,‘);
    for(int i = 7; i < l.length; i++)    // Print this code
        System.out.println(l[i]);
  }
}

  程序前半部分是java运行必须的前缀,再添加一个变量q(内容为引号“”),中间部分一个字符串数组记录整个程序源码(包含输出的源码),后半部分是用来输出的源码。emm反正看完这个代码,感觉豁然开朗,本篇博客也不算是一篇技术博客,只是对Quine做一个记录,如果看到本篇博客对其他语言如何实现Quine好奇的可以查看 https://en.m.wikipedia.org/wiki/Quine_(computing) ,源码也是wiki上的。

 

  下面的源码是在Quine的基础上,略微修改了一点点把java源码中package包也输出的实现。(其实没改什么,主要还是Quine的实现厉害2333)。

  

package xjbg;

public class Quine
{
  public static void main(String[] args)
  {
    char q = 34;      // Quotation mark character
    String[] l = {    // Array of source code
    "package xjbg;",
    "",
    "public class Quine",
    "{",
    "  public static void main(String[] args)",
    "  {",
    "    char q = 34;      // Quotation mark character",
    "    String[] l = {    // Array of source code",
    "    ",
    "    };",
    "    for(int i = 0; i < 8; i++)           // Print opening code",
    "        System.out.println(l[i]);",
    "    for(int i = 0; i < l.length; i++)    // Print string array",
    "        System.out.println(l[8] + q + l[i] + q + ‘,‘);",
    "    for(int i = 9; i < l.length; i++)    // Print this code",
    "        System.out.println(l[i]);",
    "  }",
    "}",
    };
    for(int i = 0; i < 8; i++)           // Print opening code
        System.out.println(l[i]);
    for(int i = 0; i < l.length; i++)    // Print string array
        System.out.println(l[8] + q + l[i] + q + ‘,‘);
    for(int i = 9; i < l.length; i++)    // Print this code
        System.out.println(l[i]);
  }
}

  如果有import也可以加到数组开头,那么本篇记录博客到此结束啦!

以上是关于Quine--输出程序源码的程序(java)的主要内容,如果未能解决你的问题,请参考以下文章

[loj4]Quine

php PHP语言中的Quine:没有输入,一个程序打印它自己的源代码(不读取自己的源文件)

JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。(代码片

一行python的强大功能

52 java编程思想——创建窗口和程序片 程序片限制

57 java编程思想——创建窗口和程序片 可视编程和Beans