java Scanner出现 java.util.NoSuchElementException 40

我觉得是我在一个方法A使用了Scanner,在里面把它关闭了。然后又在方法B里调用方法A之后就不能再用Scanner了Scannerin=newScanner(Syste... 我觉得是我在一个方法A使用了Scanner,在里面把它关闭了。然后又在方法B里调用方法A之后就不能再用Scanner了Scanner in = new Scanner(System.in);我觉得是关了System.in才会这样的,求大神解答~另求大神指导我做一个小项目……请做好心理准备,里面有严重的面向过程的思想……c的思想还没转过来…… 展开
 我来答
田真久
推荐于2017-12-16 · TA获得超过661个赞
知道小有建树答主
回答量:603
采纳率:100%
帮助的人:324万
展开全部

在你关闭的时候,会把System.in也关闭了。当你下次new一个读取的时候,因为输入流已经关闭,所以读取的值就是-1;在Scanner 的readinput方法里面有以下代码。

 try {
            n = source.read(buf);
        } catch (IOException ioe) {
            lastException = ioe;
            n = -1;
        }

        if (n == -1) {
            sourceClosed = true;
            needInput = false;
        }

因为读到了-1就设置sourceClosed =true;neepinput=false;

在next方法里面有以下代码:


 if (needInput)
                readInput();
            else
                throwFor();

当needinput为false,就执行throwFor,因此再看throwFor

 skipped = false;
        if ((sourceClosed) && (position == buf.limit()))
            throw new NoSuchElementException();
        else
            throw new InputMismatchException();

position 是当前读取的内容在缓冲区中位置,因为读取的是-1,因此position =0,而buf.limit()也等于0,因此就执行了throw new NoSuchElementException();

草名字真心难起
2014-06-11 · TA获得超过4893个赞
知道小有建树答主
回答量:3057
采纳率:0%
帮助的人:1279万
展开全部
你把你的代码贴出来
追问
字数有限制啊,发不完,而且怎么发那种后面背景带编译器的代码?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲜明又挺拔的雏菊D
2014-06-11 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:111
采纳率:100%
帮助的人:85.8万
展开全部
我试过了 确实是你把A中的关闭了 貌似我A B反了 也没事
import java.util.Scanner;
public class B {

public int aa(){

Scanner input = new Scanner(System.in);
System.out.println("请输入一个值");
int n = input.nextInt();
input.close();
return n;

}
}
=========另一个类=======

import java.util.Scanner;
public class A {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B();
int c = b.aa();

Scanner input = new Scanner(System.in);
System.out.println("请输入另一个值");
int m = input.nextInt();

m = c+m;
System.out.println(m);

}
}
追问
A B 反了是什么意思?
追答
额 就是我在B类关闭了  你是在A中关闭了  就这个反了  采纳吧  谢谢
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a11e90
2014-06-11 · 知道合伙人软件行家
a11e90
知道合伙人软件行家
采纳数:473 获赞数:1702
qq交流群:208779755 博客:https://my.oschina.net/haitaohu

向TA提问 私信TA
展开全部
贴下具体代码 你是如何关闭 如何调用的
追问


  可以帮我看看我的项目吗?这个就是项目里面的问题。有几个包几个类的,我都已经晕了。

字数有限制,发不出来

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式