gpt4 book ai didi

java - self 复制的程序

转载 作者:太空狗 更新时间:2023-10-29 22:31:12 25 4
gpt4 key购买 nike

是否可以制作一个 Java 程序,将其源代码打印到一个新文件中,然后编译它,然后运行编译后的程序?

最佳答案

更新:

好吧,不妨让它自动运行。享受疯狂。运行风险自负。


是的,这是可能的,因为我实际上已经把它写下来了。 它不执行 RUN 部分(这太疯狂了,因为正如其他人提到的那样,它会导致无限循环), 但它是:Quine.java

import java.io.*;
public class Quine {
public static void main(String[] args) throws Exception {
char q = 34;
String out = "Quine$";
String text = (
"import java.io.*; " +
"public class [OUT] { " +
"public static void main(String[] args) throws Exception { " +
"char q = 34; String out = `[OUT]$`; String text = `[TEXT]`; " +
"PrintWriter pw = new PrintWriter(out + `.java`); " +
"pw.format(text, 34, out, text); " +
"pw.close(); Runtime runtime = Runtime.getRuntime(); " +
"runtime.exec(`javac ` + out + `.java`).waitFor(); " +
"runtime.exec(`java ` + out); " +
"} " +
"}"
).replace("`", "%1$c").replace("[OUT]", "%2$s").replace("[TEXT]", "%3$s");
PrintWriter pw = new PrintWriter(out + ".java");
pw.format(text, 34, out, text);
pw.close();
Runtime runtime = Runtime.getRuntime();
runtime.exec("javac " + out + ".java").waitFor();
runtime.exec("java " + out);
}
}

下面是让疯狂开始的方法:

  • javac Quine.java编译
  • java Quine 运行它
    • 它将生成、编译并运行 Quine$
  • 我已确保 Quine.java 尽可能可读,因此与 Quine$.java主要区别在于格式和3x 替换次要区别在于 Quine$.javaout 设置为 Quine$$
  • Quine$ 将生成、编译并运行 Quine$$
  • Quine$$ 将生成、编译并运行 Quine$$$
  • Quine$$$ 将生成、编译并运行 Quine$$$$
  • ...

请注意,这不会通过阅读 .java 源代码等进行任何逆向工程或作弊。Quine 是一个 quine 生成器,因为它产生不同的代码格式不同,但 Quine$ 几乎是一个真正独立的 quine:它确实 self 复制,它只是重新标记它 Quine$$(它 self 复制并重新标记为 Quine$$$ 等)。

所以从技术上讲,不存在无限循环:当文件系统无法处理另一个 $ 时,它最终会停止。 我能够通过强行删除所有 Quine$* 文件来手动阻止这种疯狂行为,但风险自负!!!

关于java - self 复制的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com