能否不使用文件,编制一个程序实现对源文件的输出。
注意,不要把问题想简单了哟,前提是不用文件这样的外部手段,这样,你如果写System.out.println("...")输出,那输出的内容是无限重复下去的哟!
大家玩玩,多给点分吧,100
注意,不要把问题想简单了哟,前提是不用文件这样的外部手段,这样,你如果写System.out.println("...")输出,那输出的内容是无限重复下去的哟!
大家玩玩,多给点分吧,100
public void main(String arg[]) { System.out.println("..."); }
就是要你编程实现将上面的程序(也就是程序自己)给输出出来,但不能用文件等外部手段。
import java.io.DataInputStream;
import java.io.*;
import java.io.*;public class TestFile {
public static void main(String[] args) {
FileInputStream fis = null;
DataInputStream dis = null; try {
fis = new FileInputStream(
".//src//jcomboxchange//TestFile.java");
dis = new DataInputStream(fis); int temp;
while ((temp = dis.read()) != -1) {
System.out.print((char)temp);
}
} catch (FileNotFoundException ex) {
System.out.println(ex.toString());
} catch (IOException ex) {
System.out.println(ex.toString());
}
finally
{
try {
dis.close();
fis.close();
} catch (IOException ex1) {
System.out.println(ex1.toString());
}
}
}
}
====================
经典,确实不懂,看来理解能力不行阿,
接分总成吧
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class TestFile {
public static void main(String[] args) {
FileInputStream fis = null;
DataInputStream dis = null;
try {
fis = new FileInputStream(".//src//TestFile.java");//java文件的路径
dis = new DataInputStream(fis);
int temp;
while ((temp = dis.read()) != -1) {
System.out.print((char) temp);
}
} catch (FileNotFoundException ex) {
System.out.println(ex.toString());
} catch (IOException ex) {
System.out.println(ex.toString());
} finally {
try {
dis.close();
fis.close();
} catch (IOException ex1) {
System.out.println(ex1.toString());
}
}
}
}
System.out.println("...给分吧...");
System.out.println("...给分吧...");
System.out.println("...给分吧...");
System.out.println("...给分吧...");
System.out.println("...给分吧...");
楼主要的就是这个吧。
我还是只能说,写一个能够把自己完全打印出来的程序。比如有如下程序:
public static void main(){}
则这个程序运行结果能够在屏幕上打印出"public static void main(){}",就是这个意思。
这个功能如果利用数据文件这样的外部手段是很容易实现的,我们可以在程序里打开一个数据文件,读出文件内容,然后打印到屏幕上。如果文件的内容就是我们源程序的内容,就能够很方便的实现上述功能。所以,该题目的要求是不能利用这些外部手段,必须由源程序自己把自己打印在屏幕上。这时问题就来了,比如我的源文件是:
public static void main() { System.out.println("public static void main() { System.out.println(...)" }
就能够打印出大致相似的源文件内容,但不能完全地输出源文件内容。因为要简单地利用这么个语句来实现的话,字符串中的System.out.println("...")中的内容必须是无限嵌套的。不知道诸位现在能否清楚。
其实这个问题不仅仅是程序编制问题,这有点像一个悖论了。正如理发师的理发对象是所有不给自己理发的理发师理发,那这个理发师该不该给自己理发呢,就是一个典型的悖论。当一个程序要简单地用打印语句打印自己的时候,把必须改变自己的内容来满足打印需求,但当它进行了一定的改变后,它自己本身也变了,它又如何能够打印改变后的自己呢。
大家讨论讨论这个问题。这个问题其实应该是有答案的,我想看那些高人有哪些高手段。
String s = File.separator;
int num = 0, temp;
FileReader f1 = null;
String url = "E:" + s + "lombozeclipce" + s + "eclipse" + s
+ "workspace" + s + "myproject" + s + "src" + s + "cn" + s
+ "com" + s + "io" + s + "TestFileInputStream.java";
try {
f1 = new FileReader(url);
} catch (FileNotFoundException e) {
System.out.println("文件没有找到!");
System.exit(-1);
}
try {
while ((temp = f1.read()) != -1) {
System.out.print((char) temp);
num++;
}
} catch (IOException e) {
e.printStackTrace();
}
try {
f1.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("读取文件" + num + "字符");
}
讨论啊!!!!!
http://www.javadingle.com
考虑一下,只要解决这个问题:
设字符串为s="System.out.println(s);",而要打印字符串s,则成了:
s="System.out.println(s);";System.out.println(s);
这里实际程序就变成了两个相同的字符串,如果要简单地修改s来添加后面的一个串,则形成了一个循环。所以必须找到一个办法,即可以输出两个串,但又不是简单地再定义s时添加,也许就能解决这个问题了。
编译器就是这种模型啊,
可以用java自己做一个小型编译器啊
不过是很麻烦的
完全可以自己写编译器来解释自己的程序,呵呵
不知楼主为什么要这个程序啊,这个不好玩,开发编译器是一个很宏大的工程啊
hehe, 终于搞懂了。这里有一个答案,不过,不是我想出来的,是以前不知什么时候从别处弄来的,出处已经不记得了(顺便向原作者致敬!):package test;public class SelfPrint {public static void main(String[] a) {String s="package test;public class SelfPrint {public static void main(String[] a) {String s=;char c = '';System.out.println(s.substring(0, 83) + c + s + c + s.substring(83, 94) + c + s.substring(94));}}";char c = '"';System.out.println(s.substring(0, 83) + c + s + c + s.substring(83, 94) + c + s.substring(94));}}
---------------------------------------------------------------------致敬!