请大家帮我分析一下这个为什么是死循环?

来源:百度知道 编辑:UC知道 时间:2024/05/17 09:36:18
import java.util.Scanner;
class tg{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int st=0;
while(true){
try{
st=input.nextInt();
System.out.println("输入数据是:"+st);
}catch(Exception e){System.out.println("输入错误");}
}
}
}
我的意思是:程序一旦在try{}部分发生异常之后将进入死循环,如果try{}部分没有发生异常则程序将是正常执行,我要大家帮我分析的是在try{}部分发生异常之后为什么会进入死循环?
死循环的表现是在try{}部分发生异常之后将连续不断地输出:“输入错误”.......
你可以自己实验一下看是不是。
老大,我知道把try{}catch(){}与while循环的嵌套层次调换一下程序就正常,但是我始终想不通的一个问题是:在这个程序中,为什么在catch{}处理完异常返回下一次循环的时候,本语句"st=input.nextInt();"直接跳过而没有等待我输入数据,我的猜测是try{}在循环测试内存中发生错误的同一处地址,所以循环没有停下来等待输入
不知道这种想法是否正确?
terryztx举人,你好,麻烦你把try{}catch(){}放在while循环之内再向我解释吧,你们所做的这些改动我都试过
坦白的说:只要try{}catch(){}放在while循环之外,程序无论怎样做正常性的改动都不会进入死循环。我要知道的是为什么本程序(try{}catch(){}放在while循环之内)会进入死循环,大家现在理解了我的意思了吗?这个问题我想了两天两夜没有得出死循环的原因。

郁闷了,哪有这么麻烦啊!我来给你一针见血:
你的意思是希望把死循环放在try块里面就可以啦!!代码如下(测试通过):

import java.util.Scanner;
class tg{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int st=0;
try{

while(true){
st=input.nextInt();
System.out.println("输入数据是:"+st);
}
}catch(Exception e){
System.out.println("输入错误");}
}
}

whlie(true)
这就是一个死循环 你可以设置一个标志
boolean flag=true;
while(flag){
try{
st=input.nextInt();
System.out.println("输入数据是:"+st);
flag=false;
}catch(Exception e){System.out.println("输入错误");}

我测试你的程序了 死循环表示的确如你所说的那样
import java.util.Scanner;
class tg{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int st=0;
boolean flag =true;

try{
while(flag){
System.out.println(st);
st=input.nex