java基础之Scanner close方法

一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

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就不可使用了。

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值