能否不使用文件,编制一个程序实现对源文件的输出。
注意,不要把问题想简单了哟,前提是不用文件这样的外部手段,这样,你如果写System.out.println("...")输出,那输出的内容是无限重复下去的哟!
大家玩玩,多给点分吧,100

解决方案 »

  1.   

    不懂吗,比如有程序:
    public void main(String arg[]) {  System.out.println("..."); }
    就是要你编程实现将上面的程序(也就是程序自己)给输出出来,但不能用文件等外部手段。
      

  2.   

    懂了这个java文件本来就是文件 又不能用文件痛苦
      

  3.   

    看了好几遍楞是看不懂LZ讲社么,似云似雾的...LZ可以在WINDOWS界面系统里格式化C盘吗?
      

  4.   

    import java.io.FileInputStream;
    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());
                }
            }
        }
    }
      

  5.   

    看了好几遍楞是看不懂LZ讲社么,似云似雾的...LZ可以在WINDOWS界面系统里格式化C盘吗?
    ====================
    经典,确实不懂,看来理解能力不行阿,
    接分总成吧
      

  6.   

    import java.io.DataInputStream;
    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());
    }
    }
    }
    }
      

  7.   

    System.out.println("...给分吧...");
    System.out.println("...给分吧...");
    System.out.println("...给分吧...");
    System.out.println("...给分吧...");
    System.out.println("...给分吧...");
    System.out.println("...给分吧...");
      

  8.   

    Runtime.getRuntime().exec("cmd.exe /c copy a.java aa.java");
    楼主要的就是这个吧。
      

  9.   

    以前学C的时候有牛人写了这样一个程序这哥们现在拿到Java版块来现来了!不明白楼主的意思也很正常,楼主确实没有表达清楚。
      

  10.   

    我不相信有这种可能!Java 程序运行的时候,只需要 .class 文件,当初生成这个 .class 的那个 .java 文件可能已经不存在了。这个程序如果要输出那个 .java 的文字内容,门都没有,反编译也不行。不过也许是误解了。也许楼主原题的意思,并不是“要构造一种逻辑,使得程序能把自己的源代码输出”,而是要写一个程序,“输出的结果跟它的源程序一样”就可以了。如果是后者的话,倒是可以考虑考虑,无非就是一些打印语句嘛,不过的确需要一些技巧才能实现“一字不差”……
      

  11.   

    靠,我要怎么说呢,是我的表达能力太差还是诸位不想动脑筋,痛苦哟!
    我还是只能说,写一个能够把自己完全打印出来的程序。比如有如下程序:
    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("...")中的内容必须是无限嵌套的。不知道诸位现在能否清楚。
    其实这个问题不仅仅是程序编制问题,这有点像一个悖论了。正如理发师的理发对象是所有不给自己理发的理发师理发,那这个理发师该不该给自己理发呢,就是一个典型的悖论。当一个程序要简单地用打印语句打印自己的时候,把必须改变自己的内容来满足打印需求,但当它进行了一定的改变后,它自己本身也变了,它又如何能够打印改变后的自己呢。
    大家讨论讨论这个问题。这个问题其实应该是有答案的,我想看那些高人有哪些高手段。
      

  12.   

    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));}}
      

  13.   

    package cn.com.io;import java.io.*;public class TestFileinputStream { public static void main(String[] args) {
    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 + "字符");
    }
      

  14.   

    to interpb(曾曾胡,深怕情多累美人!):请一字不差地输入那段程序,千万不要做格式美化。
      

  15.   

    再顶,望继续讨论。maquan('ma:kju)好像没有完全对。这个问题其实不仅仅是编程技巧的东西了,从它里面能够体会更多的东西。
    讨论啊!!!!!
      

  16.   

    去这里看看吧:
    http://www.javadingle.com
      

  17.   

    还没有人提方案吗?
    考虑一下,只要解决这个问题:
    设字符串为s="System.out.println(s);",而要打印字符串s,则成了:
    s="System.out.println(s);";System.out.println(s);
    这里实际程序就变成了两个相同的字符串,如果要简单地修改s来添加后面的一个串,则形成了一个循环。所以必须找到一个办法,即可以输出两个串,但又不是简单地再定义s时添加,也许就能解决这个问题了。
      

  18.   

    这个问题是可以实现的
    编译器就是这种模型啊,
    可以用java自己做一个小型编译器啊
    不过是很麻烦的
    完全可以自己写编译器来解释自己的程序,呵呵
    不知楼主为什么要这个程序啊,这个不好玩,开发编译器是一个很宏大的工程啊
      

  19.   


    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));}}
    ---------------------------------------------------------------------致敬!