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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫嘉伟 中级黑马   /  2013-3-4 14:02  /  1985 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

while(sc.hasNext()){
   if(sc.next()=="\n"){sc.close();}
   str[i]=sc.next();
   i++;
   System.out.println(str[i]);
   if(i==3){
    stu[k]=new student(str[0],Integer.parseInt(str[1]),Integer.parseInt(str[2]),Integer.parseInt(str[3]));
    k++;
    i=0;   
   }
  }

如上面的代码所示,if(sc.next()=="\n"){sc.close();我想通过这一个条件判断,当读到回车的时候把输入流关了这样就能结束循环了吧,可是好像不行,然后的话我输入完了很久不输入它就一直等,这个sc.hasNext()它啥时候才判断为假啊,感觉没输入它也一直等待那还要这判断干嘛,还有就是我如果用了sc.close()关掉它的话它该离开这循环了吧·求解答

4 个回复

倒序浏览
流虽然关了,但while(sc.hasNext()) 处于不明确状态,若后面有数据呢,这里用break退出,再while外部关闭流最佳
回复 使用道具 举报
实例程序:
1、利用 Scanner 实现从键盘读入integer或float 型数据

//import java.io.*;
import java.util.*;
public class InputTest{
public static void main(String[] args){
   Scanner in = new Scanner(System.in);    //Scanner类
   System.out.println("Please input a float number:");
   float a = in.nextFloat();    //接收float数据
   System.out.println("Please input a string: ");    //这里试了一下输入String数据,但中间有空格就不能显示,Scanner类还不具有这功能
   Scanner str = new Scanner(System.in);
   System.out.println("The string is :" + str.next());
   System.out.println("The float number is: " + a);
   for(int i = 0;i < 4;i++){
    System.out.println("Please input a int number: ");   //for循环接收int型数据
    int b = in.nextInt();
    System.out.println("The int number is: " + b);
   }
}
}
回复 使用道具 举报
2、利用 BufferedReader实现从键盘读入字符串并写进文件abc.txt中

import java.io.*;
public class InputTest{
public static void main(String[] args) throws IOException{
   BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
   BufferedWriter buf2 = new BufferedWriter(new FileWriter("abx.txt"));
   String str = buf.readLine();
   while(!str.equals("exit")){
    buf2.write(str);
    buf2.newLine();
    str = buf.readLine();
   }
   buf.close();
   buf2.close();
}
}
回复 使用道具 举报
关于JDK1.5 Scanner类的说明

Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.
Scanner reader=new Scanner(System.in);

然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型:
next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()
使用nextLine()方法输入行中可能包含空格.如果读取的是一个单词,则可调用.next()方法

3、Scanner和BufferedReader的区别
在命令行模式下要输入数据至程序中时,我们可以使用标准输入串对象System.in.但是,我们并不经常直接使用它,因为System.in提供的 read方法每次只能读取一个字节的数据,而我们平时所应用的通常是读取一个字符串或者是一个数字,所以read方法所以提供的功能,对我们来说并没有太大的用处.
在Java SE 6中,可以使用Scanner类取得用户的输入,Scanner类位于java.util包中,如果你要使用Scanner取得用户输入的话,要加上 import java.util.Scanner;这条语句.import的功能是告诉编译器,你将使用java.util包中的Scanner类.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马