javasanner 报错问题

publicstaticintaaa(){Scannerin=newScanner(System.in);intc=0;while(true){System.out.pr... public static int aaa(){
Scanner in =new Scanner(System.in);
int c = 0;
while(true){
System.out.println("请输入一位4位整数");
try {
c= in.nextInt();
if(c>999&&c<10000){
break;
}else{
System.out.println("输入有误,请重新输入");
c= in.nextInt();
}
} catch (Exception e) {
System.out.println("请输入整数");
c= in.nextInt();
}
}
in.close();
return c;
}
public static void cai(){

int haoma=(int)(Math.random()*10000);
if(haoma<999)
{
haoma = Integer.parseInt(String.valueOf(haoma)+"0");
}
System.out.println(haoma);
//String ll = "";
int aa = aaa();
if(aa>999&&aa<100000){
while(true){
if(aa==haoma){
System.out.println("你猜对了,可以去买彩票了");
}else{
System.out.println("你猜错了,可以去买彩票了");
}
System.out.println("是否继续Y继续 其他结束");
Scanner sa =new Scanner(System.in);
String ss = sa.next();
if("Y".equals(ss)||"y".equals(ss)){
cai();
}else{
break;
}
sa.close();
}
}else{
aa = aaa();
}

//return ll;
}
public static void main(String[] args) {
System.out.println("欢迎来到猜号小游戏");
cai();
}

Scanner sa =new Scanner(System.in);
String ss = sa.next();
这两行 一直报错
Exception in thread "main" java.util.NoSuchElementException
展开
 我来答
dark19861201
2018-05-14 · TA获得超过2153个赞
知道大有可为答主
回答量:2584
采纳率:79%
帮助的人:1803万
展开全部
其实你的问题主要是System.in这个流是个静态的,所以你再aaa方法里面关掉Scanner的同时,导致System.in这个流一起关闭了,所以后续再要通过这流获取数据就不行了,所以你把创建Scanner in =new Scanner(System.in);提出来统一使用一个是个不错的解决办法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-05-14
展开全部
换成nextLine,获取下一行。
追问
一样的!我试了 我发现问题了 :
问题是: 两个方法都用到了 Scanner in =new Scanner(System.in);
把这句话 提出到全局变量就可以了~~
下面的 Scanner sa =new Scanner(System.in); 删除掉
用全局变量的
追答
嗯,可以,统一处理输入流数据。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
铃喰同学提不起劲D6
2018-05-15 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:183
采纳率:62%
帮助的人:35.5万
展开全部
你把close()这个方法注释掉就可以,这个是关闭scanner,如果调用了它,就会报错。

scanner在程序走完就会自己关闭,不要调用这个方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式