Scanner(System.in)死循环?

fangzhen2005 2009-12-03 07:08:53
代码目的:想得到符号两边的数字。
提示输入后能得到第一个next()然后就死掉不动了?请问这是为什么呀??

import java.util.Scanner;

public class TestScannerDelimit {

public static void main(String[] s){
System.out.println("请输入表达式,例如:3+2,5*3");
Scanner scanner = new Scanner(System.in);

scanner.useDelimiter("[\\+\\-\\*\\/]");
while(scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}
...全文
283 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
东子于 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiangnaisong 的回复:]
引用楼主 fangzhen2005 的回复:
代码目的:想得到符号两边的数字。
提示输入后能得到第一个next()然后就死掉不动了?请问这是为什么呀??


哪里是死掉不动,是scanner继续等待从流中读数据呀。
原因是:若Scanner sc=new Scanner(new File("text.txt"));
则scanner将一直从文件流中读下去,直至读到流结束(即:文件结束……
[/Quote]

3楼高手。。。。。谢了!!
fangzhen2005 2009-12-29
  • 打赏
  • 举报
回复
谢谢各位,分数太少,不成敬意!
小梁_unique 2009-12-11
  • 打赏
  • 举报
回复
最好少用scanner吧,现在都是图形界面了。已经要灭绝了
bobo364 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiangnaisong 的回复:]
引用楼主 fangzhen2005 的回复:
代码目的:想得到符号两边的数字。
提示输入后能得到第一个next()然后就死掉不动了?请问这是为什么呀??


哪里是死掉不动,是scanner继续等待从流中读数据呀。
原因是:若Scanner sc=new Scanner(new File("text.txt"));
则scanner将一直从文件流中读下去,直至读到流结束(即:文件结束为止)。
同样道理:Scanner sc=new Scanner(System.in);也是一直从System.in流读下去,直至System.in流结束。
因此:楼主要按Ctrl+Z来告知scanner,System.in流已结束。
[/Quote]


估计就是的,scanner很少用,估计就是容易出问题,给楼主个keyboard类,希望有用



import java.io.*;
public class Keyboard{
static BufferedReader inputStream = new BufferedReader
(new InputStreamReader(System.in));
public static int getInteger() {
try{
return (Integer.valueOf(inputStream.readLine().trim()).intValue());
}
catch (Exception e) { e.printStackTrace(); return 0; }
}
public static String getString() {
try{
return (inputStream.readLine());
}
catch (IOException e) { return "0";}
}
}



云上飞翔 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 fangzhen2005 的回复:]
代码目的:想得到符号两边的数字。
提示输入后能得到第一个next()然后就死掉不动了?请问这是为什么呀??
[/Quote]

哪里是死掉不动,是scanner继续等待从流中读数据呀。
原因是:若Scanner sc=new Scanner(new File("text.txt"));
则scanner将一直从文件流中读下去,直至读到流结束(即:文件结束为止)。
同样道理:Scanner sc=new Scanner(System.in);也是一直从System.in流读下去,直至System.in流结束。
因此:楼主要按Ctrl+Z来告知scanner,System.in流已结束。
crazylaa 2009-12-03
  • 打赏
  • 举报
回复
碰到过,你要把它先定义成一个变量,否则它一直在找输入。死循环了。
String st = scanner.next();
System.out.println(st);
healer_kx 2009-12-03
  • 打赏
  • 举报
回复
不会吧。。。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧