java Scanner出现 java.util.NoSuc...33
发布网友
发布时间:2023-11-20 00:14
我来回答
共4个回答
热心网友
时间:2024-07-20 19:42
在你关闭的时候,会把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();
热心网友
时间:2024-07-20 19:46
我试过了 确实是你把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);
}
}
热心网友
时间:2024-07-20 19:43
你把你的代码贴出来
热心网友
时间:2024-07-20 19:47
贴下具体代码 你是如何关闭 如何调用的