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

  • 相关阅读:
    笔记手动排序
    笔记手动分页
    Spring定时任务Quartz配置之手动设置
    java 日期处理
    SQL Case when 的使用方法
    Hibernate八大类HQL查询集合
    Spring定时任务Quartz配置
    各个浏览器显示版本(IE,火狐)
    js转译html标签
    定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器
  • 原文地址:https://www.cnblogs.com/zzzdp/p/9297362.html
Copyright © 2011-2022 走看看