java基础之Scanner close方法
来源:互联网 发布:mac的chili试色 编辑:程序博客网 时间:2024/06/08 10:43
一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
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就不可使用了。
0 0
- java基础之Scanner close方法
- java.util.Scanner.close()方法
- java中Scanner类中的close()方法的作用
- Scanner类的close()方法
- Java基础之Scanner类
- Java语言基础之Scanner类小结
- Java语言基础之Scanner类
- Java基础之引用数据类型scanner类
- Java之应何时调用close()方法?
- java基础Math/Scanner
- Java基础----Scanner
- Java基础:Scanner
- java基础之Scanner循环求班级平均分
- 跟着姜少学Java基础编程之五:Scanner、Random、String
- Java基础之Scanner,Random类的对象
- JAVA之简单scanner
- java之Scanner详解
- Java学习之Scanner
- uva 1152 ——4 Values whose Sum is 0
- 细说Cocos2d-JS——从项目构造说起
- 黑马程序员---自学随堂笔记----异常
- 剑指Offer-题14:调整数组顺序使奇数位于偶数之前
- 第十周 项目1 二叉树算法库
- java基础之Scanner close方法
- 第十周项目2--二叉树遍历的递归算法
- 页式虚拟存储管理
- 第10周项目1 二叉树算法库
- 第十周实践项目2 - 二叉树遍历的递归算法
- 第十周项目3--利用二叉树遍历思想解决问题(3)
- 第九周项目3-稀疏矩阵的三元组表示的实现及应用(2)
- 第10周项目1 二叉树算法库
- RLT USB WiFi驱动源码分析(Type A)