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

  • 相关阅读:
    linux下samba服务器的搭建(案列模拟)
    linux下nfs服务器的搭建
    linux 下 php+gd2+freetype+jpeg+png+zlib编译安装
    linux下xcache的安装
    wget如何设置代理
    实验记录:vsftp整合mysql-pam管理虚拟账号
    tr命令 实例
    sed学习笔记
    Byte、KB、MB、GB、TB、PB转换
    对lombbok @slf4j 进行测试用例
  • 原文地址:https://www.cnblogs.com/zzzdp/p/9297362.html
Copyright © 2011-2022 走看看