java Scanner中一个问题 5

先看下面两段代码packagecom.j2se.jaa01;importjava.util.Scanner;publicclassTestScanner{publicst... 先看下面两段代码
package com.j2se.jaa01;

import java.util.Scanner;

public class TestScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入字符串:");
String line = sc.nextLine();
if("exit".equals(line)){
break;
}System.out.println(">>>>"+line);
}
}
}
==============================================================
import java.util.*;

public class SwitchCaseDemo {
public static void main(String[] args) {
int score;
Scanner console = new Scanner(System.in);
boolean isInt=true;
while(true) {
try {
score = console.nextInt();
}
catch (InputMismatchException e) {
isInt=false;
System.out.println("格式不正确,从新再输入:");
}
if(true ==isInt)
break;
}
}
}
=====================================================
第二段代码如果输入一个字母就会死循环报错,解决方法是将Scanner初始化放到while循环中,如果不放的话第二段代码中的变量score就不会发生变化。(不知道我解释的对不对)
问题是看第一段代码,Scanner初始化也没放到while里啊,但变量line就会变
总之这里面太乱了,初学求大神指导下
展开
 我来答
染青42
2015-04-23 · TA获得超过1058个赞
知道小有建树答主
回答量:856
采纳率:50%
帮助的人:142万
展开全部
你这段代码是需要完成什么功能,而且也没错啊,isInt开始赋值是true,当输入字符就会异常,isInt就为false,然后这个wile循环的唯一出口就没了,如果不是,就只循环一次
追问
第二段代码,如果输入字符,就会出现死循环报错,就是一直输出那个异常,就不会有重新输入这个阶段了。我把Scanner =new这段放到while里面就不会了。
关键是这个原理好像是如果不经过new的话,score就一直是个字符,不会再有机会重新输入,但第一段代码new也在外面,还是可以重新输入修改line的值
追答
这个要从scanner的原理说了,scanner在要求用户输入的时候,其实是在内存中占用一段内存用于用户输入,你这里,这段内存能存储int类型的数据,而其他类型的就会抛出异常,然而,我们用sc.nextInt()调用没把该段内存中的东西提出来,因为现在存入的是字符,提取不出来,他就会一直占用这段内存,导致我们二次输入时,就不会再要求用户输入了,他会继续试图调用该段内存数值,也就一直报错
你通过new 是重新生成一个scanner对象,所有都初始化了的,所以才能再次输入,但是每次在调用这个方法时都会new 一个scanner对象,会占用我们的内存,所以并不好
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式