java基础之Scanner close方法
2015-11-06 08:47
537 查看
一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
这些基本知识就不赘述了。
一个小程序,输入城市名和距离,然后查询。
在main函数里new Scanner(System.in),在input函数里也new Scanner(System.in)
如果main函数和input函数都执行close方法,则main函数里出现下述异常。
Exception in thread “main” java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at CityDistance.main(CityDistance.java:58)
经过查询发现是close在作怪。
1、Scanner对象只能有一个(可设为成员变量)
2、Scanner对象只能关闭一次(如果非得关闭的话)
我猜测,两个new Scanner都指向同一个System.in,然后有一个scanner close之后,System.in就关闭,之后另一个scanner就不可使用了。
Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
这些基本知识就不赘述了。
一个小程序,输入城市名和距离,然后查询。
在main函数里new Scanner(System.in),在input函数里也new Scanner(System.in)
import java.util.*; public class CityDistance { private List<String> city = new ArrayList<String>(); private int answer = 0; private Map<String, Integer> distance = new HashMap<String, Integer>(); public void input() { Scanner in = new Scanner(System.in); String temp = null; System.out.println("请输入城市(“###”结束输入):"); /* * 注意:字符串是一个对象,不是基本类型,不能使用==比较,要使用equals */ while (!(temp = in.next()).equals("###")) { city.add(temp); } int number = city.size(); for ( int i = 0; i < number; i++ ) { for ( int j = 0; j < number; j++ ) { String key = "" + city.get(i) + city.get(j); System.out.print("请输入"+city.get(i) + "<-->"+city.get(j)+"的距离:"); distance.put(key, in.nextInt()); } } /* * 注意:不能关闭,否则的话之后即使在main函数里有一个scanner,也不能使用 */ in.close(); } public int FindDistance(String A, String B) { String str = A + B; if(distance.containsKey(str)){ answer = distance.get(str); return answer; } return 0; } public static void main(String[] args) { CityDistance cd = new CityDistance(); cd.input(); Scanner in = new Scanner(System.in); System.out.println("查询城市间距离:"); System.out.print("输入城市1:"); /* * 注意:input()里不要调用in.close(),否则这里得不到输入,你可以测试一下,加深下印象 */ String A = in.next(); System.out.print("输入城市2:"); String B = in.next(); System.out.println(A + "<-->"+B + "的距离:" + cd.FindDistance(A,B)); } }
如果main函数和input函数都执行close方法,则main函数里出现下述异常。
Exception in thread “main” java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at CityDistance.main(CityDistance.java:58)
经过查询发现是close在作怪。
1、Scanner对象只能有一个(可设为成员变量)
2、Scanner对象只能关闭一次(如果非得关闭的话)
我猜测,两个new Scanner都指向同一个System.in,然后有一个scanner close之后,System.in就关闭,之后另一个scanner就不可使用了。
相关文章推荐
- Java math库的总结
- Spring学习笔记(三)
- 【深入Java虚拟机】之二:Class类文件结构
- Spring之SpringMVC的MethodNameResolver(源码)分析
- javaCode二维数组
- HashMap Java Doc
- Copy Constructor in Java
- Java基础语法2
- Java基础语法1
- Java容器学习笔记(1)
- 10003---JavaWeb开发基础--Servlet
- adt eclipse打开预览android XML布局很卡
- struts2的认识
- JAVA概述
- 编写供有限状态机使用的Java框架
- eclipse创建android项目,XML文件无法正常可视化预览布局
- spring3.2 aop 搭建 (1)
- java中的多线程
- Java enum的用法详解
- java.io包的总体框架图, 便于记忆!