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也可以加到数组开头,那么本篇记录博客到此结束啦!