作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在采访中被问到如何在执行同一程序时将整个源程序显示为输出
File-handling
概念,有没有其他方法可以完成这个任务有什么建议吗?
更新的解决方案: 当我研究某事时,我找到了解决方案,我们可以通过 Quine 来解决
String array
..as @Basile commented below最佳答案
这是一个运行时会显示自身的程序。秘诀是创建一个包含程序行的字符串数组,数组本身中的字符串除外。所以你有第一个循环来显示行代码在字符串数组之前。然后你有一个循环来显示数组字符串,然后你有一个循环来显示表示剩余代码行的数组字符串。
请注意,空格字符的 ASCII 值为 32,双引号的 ASCII 值为 34。下面创建“quote”和“sixSpaces”的原因是为了在显示它们时避免使用转义符字符\, 尝试显示引号时。
public class ProgramThatDisplaysItself {
public static void main(String[] args) {
char space = (char)32;
char quote = (char)34;
String emptyStr = new String();
String spaceStr = String.valueOf(space);
String sixSpaces =
emptyStr.concat(spaceStr).concat(spaceStr).concat(spaceStr)
.concat(spaceStr).concat(spaceStr).concat(spaceStr);
String linesOfCode[] = {
"package programthatdisplaysitself;",
"",
"public class ProgramThatDisplaysItself {",
"",
" public static void main(String[] args) {",
" char space = (char)32;",
" char quote = (char)34;",
" String emptyStr = new String();",
" String spaceStr = String.valueOf(space);",
" String sixSpaces = ",
" emptyStr.concat(spaceStr).concat(spaceStr).concat(spaceStr)",
" .concat(spaceStr).concat(spaceStr).concat(spaceStr);",
"",
" String linesOfCode[] = {",
// Note: here's where the String array itself is skipped
" };",
"",
" for ( int i = 0; i < 14; i++ ) {",
" System.out.println( linesOfCode[i] );",
" } // end for i",
"",
" for ( int j = 0; j < linesOfCode.length; j++ ) {",
" System.out.println( sixSpaces + quote + linesOfCode[j] + quote + ',' );",
" } // end for j",
"",
" for ( int k = 14; k < linesOfCode.length; k++ ) {",
" System.out.println( linesOfCode[k] );",
" } // end for k",
"",
" } // end main()",
"",
"} // end class ProgramThatDisplaysItself",
}; // end linesOfCode[]
//display the lines until the String array elements
for ( int i = 0; i < 14; i++ ) {
System.out.println( linesOfCode[i] );
} // end for i
//display the String array elements
for ( int j = 0; j < linesOfCode.length; j++ ) {
System.out.println( sixSpaces + quote + linesOfCode[j] + quote + ',' );
} // end for j
//display the lines after the String array elements
for ( int k = 14; k < linesOfCode.length; k++ ) {
System.out.println( linesOfCode[k] );
} // end for k
} // end main()
} // end class ProgramThatDisplaysItself
关于java - 执行时将源程序显示为输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19603099/
我是一名优秀的程序员,十分优秀!