zoukankan      html  css  js  c++  java
  • 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也可以加到数组开头,那么本篇记录博客到此结束啦!

  • 相关阅读:
    第一章:Android系统的编译和移植实例读书笔记
    第二章:Android系统与嵌入式开发读书笔记
    第三章:Android移植平台工具介绍读书笔记
    第十章 嵌入式Linux的调试技术
    第九章 硬件抽象层:HAL
    第八章 让开发板发出声音:蜂鸣器驱动
    第七章 LED将为我闪烁:控制发光二极管
    第六章 第一个Linux驱动程序:统计单词个数
    第五章 搭建S3C6410开发板的测试环境
    第四章 源代码的下载和编译
  • 原文地址:https://www.cnblogs.com/zzzdp/p/9297362.html
Copyright © 2011-2022 走看看