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的思想还没转过来……
展开
4个回答
展开全部
在你关闭的时候,会把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();
展开全部
你把你的代码贴出来
追问
字数有限制啊,发不完,而且怎么发那种后面背景带编译器的代码?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我试过了 确实是你把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);
}
}
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中关闭了 就这个反了 采纳吧 谢谢
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-06-11 · 知道合伙人软件行家
关注
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询