A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王言龙 中级黑马   /  2012-6-21 21:59  /  3125 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wyl530274554 于 2012-6-22 08:28 编辑

G:\\Code\\Hello.txt 文件里有一句话"Hello the Java."
用下在的代码打印了这句话后,还在不停的打印??????????????????????
请问为什么?
  1. import java.io.*;

  2. class FileReaderDemo {
  3.         public static void main(String[] args) throws IOException {
  4.                 FileReader fr = new FileReader("G:\\Code\\Hello.txt");
  5.                 char ch = 0;
  6.                 while((ch=(char)fr.read()) != -1) {
  7.                         System.out.print(ch);
  8.                 }
  9.         }
  10. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
oracleserver + 1 赞一个!
黄奕豪 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
本帖最后由 黑马—陈磊 于 2012-6-21 22:28 编辑

import java.io.*;
class FileReaderDemo {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("G:\\Code\\Hello.txt");
                char ch = 0;
                while((ch=(char)fr.read()) != -1) {
                        System.out.print(ch);
                }
        }
}

可以这样改:fr.read())返回int型
public static void main(String[] args) throws IOException {
          FileReader fr = new FileReader("G:\\Code\\Hello.txt");
          int i=0;
          while((i=fr.read()) != -1) {
                  
                  System.out.print((char)i);
          }
          System.out.print("结束!");
          fr.close();

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
黄奕豪 + 1 赞一个!
黑马-王言龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
import java.io.*;

class FileReaderDemo {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("G:\\Code\\Hello.txt");
                char ch = 0;
                while((ch=(char)fr.read()) != -1) {
                        System.out.print(ch);
                }
        }
}

我试了,你这个代码只打印一次啊, 你的意思是不是读完了程序没有停止?

你可以在读的地方判断一下,然后弄个break; 停止程序
回复 使用道具 举报
那是一个while循环,三大循环之一。当然不停地打印了,你可以换成if试试
回复 使用道具 举报
本帖最后由 田建 于 2012-6-21 22:38 编辑

你这个问题我分析了一下,首先你要明白read()的返回值类型是int,当它读到末尾处的时候返回值是-1,这就是为什么用是否等于-1做判断的原因,而你定义一个字符ch
while((ch=(char)fr.read()) != -1)//这句话前面是字符,不可能=-1,因而会一直打印下去;
改的方法你将char改为int;
具体代码如下:
          int i=0;
          while((i=fr.read()) != -1)
          {
                  
                  System.out.print((char)i);
          }

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
黄奕豪 + 1 赞一个!
黑马-王言龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正确,判断条件有问题,两个不同类型的数据。
或者你也可以改成:while((ch=(char)fr.read()) != (char)-1)  试试
回复 使用道具 举报
王涛 黑马帝 2012-6-21 23:09:04
7#
import java.io.*;

class FileReaderDemo {
        public static void main(String[] args) throws IOException
         {
                           //创建一个文件读取流对象,和指定名称的文件相关联
                                FileReader fr = new FileReader("G:\\Code\\Hello.txt");
               
                                /*int ch = 0;
                while((ch=fr.read()) != -1) {                //这是一种方法,比较简单一点的
                        System.out.print((char)ch);*/
                               
                                while(true)
                                {
                                        int ch = fr.read();
                                        if(ch==-1)
                                                break;            //这也是一种,
                                        System.out.print((char)ch);
                                }                               
        }
}
你那个while循环中的前面是char类型的,后面的是-1,不会停止。

评分

参与人数 1黑马币 +1 收起 理由
黑马-王言龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
01.import java.io.*;

02.

03.class FileReaderDemo {

04.        public static void main(String[] args) throws IOException {

05.                FileReader fr = new FileReader("G:\\Code\\Hello.txt");

06.                char ch = 0;//ch是char类型,和下句 while((ch=(char)fr.read()) != -1中的int类型,循环不会停止;停止的话可以用break语句停止。

07.                while((ch=(char)fr.read()) != -1) {

08.                        System.out.print(ch);

09.                }

10.        }

11.}
回复 使用道具 举报
sunhaodi 发表于 2012-6-21 22:28
import java.io.*;

class FileReaderDemo {

这个问号是什么东西?

TT截图未命名.jpg (220.17 KB, 下载次数: 39)

TT截图未命名.jpg
回复 使用道具 举报
wyl530274554 发表于 2012-6-22 08:12
这个问号是什么东西?

问号是ASCII码表里面对应的-1,就是11111111或者其他不符合码表里面所拥有字符的描述符号。叫做未知符号吧!简单点说,就是码表里面没有的东西,都用问号表示!!你那个在前面加char转型就是转换成ASCII码表里面的内容!!

评分

参与人数 1黑马币 +2 收起 理由
黑马-王言龙 + 2 赞一个!

查看全部评分

回复 使用道具 举报
(ch=(char)fr.read()) != -1        =-1是表明没有内容可读了  就不会执行while了     。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马