注册 登录
编程论坛 新人交流区

[求助]try{}catch{}语句实现循环时的问题,高手帮忙看看。

hanssion 发布于 2007-10-22 13:11, 1422 次点击
怎么实现输入一个字符,要求是int型,如果不是则重新输入,直到输入正确;
小弟初学JAVA,高手看下下面的程序:
import javax.swing.JOptionPane;
class A
{
public static void main(String[] args)
{String s=JOptionPane.showInputDialog("输入一个数");
int m=0,n=0;
while(n==0)
{try
{
m=Integer.parseInt(s);
n=1;
}
catch (Exception e)
{
System.out.println("please input a integer");
}
}
System.out.println(m);
}
}
但是这样行不通,会一直执行catch里面的语句,成了一个死循环。是不是因为异常类对象还没有被释放的缘故?但JAVA并不提供手动释放对象。。。对于try语句是在出现异常的时候catch才捕捉异常类的对象还是不管是否有发生异常,只要有相应异常类对象存在就转入catch语句?高手回答下,有什么错误请指正,有错才会有进步。。

[此贴子已经被作者于2007-10-23 12:14:49编辑过]

12 回复
#2
trhack2007-10-22 13:44
catch (Exception e)
我想知道你这定义的 变量e 去哪了?好象到后面没有抛出异常吧?我也是菜菜
#3
hanssion2007-10-22 13:54

这个不是我自定义的异常类,是包里自带的。。

#4
hanssion2007-10-22 20:09

顶一个,期待有人解答。。

#5
hanssion2007-10-23 04:06
顶,还没人回答。。
#6
hanssion2007-10-23 12:13
没人解决。。看来要改标题了
#7
Gramary2007-10-23 12:45
while(true)
{
try
{
m=Integer.parseInt(s);
break;
}
catch (Exception e)
{
System.out.println("please input a integer");
}


}
System.out.println(m);
写成这样就可以了
#8
xxjzx2007-10-23 13:32

你没有判断输入的是否是整数呀!而且必须要将字符串转成字符再一个个判断才行!
看这样改一下行不行!不过输出语句有多条!你自己再看着改一下吧!还有就是这只是判断输入的是不是整数,输入不对并没有返回重新输入!如果要返回并重新输入的话,你只要将jOptionPane1控件重new一下即可!
import javax.swing.JOptionPane;
class A
{
public static void main(String[] args)
{
String s = jOptionPane1.showInputDialog("输入一个数");
char[] zf = new char[s.length()];
try {
for (int i = 0; i < zf.length; i++) {
zf[i] = s.charAt(i);
if (Character.isDigit(zf[i]) == false) {
System.out.println("输入的不是数字");
} else if (s.indexOf('.') != -1) {
System.out.println("输入中包括小数点不是整数!");
} else {
System.out.println("输入的是整数");
}
}

}
catch (Exception ex) {
}
}

[此贴子已经被作者于2007-10-23 14:07:27编辑过]

#9
xxjzx2007-10-23 13:52
版主
测了一下你的方法,好像还是死循环!
#10
hanssion2007-10-23 20:24

感谢以上的回答,问题未解决,持续观望中。

#11
hanssion2007-10-24 01:32
以下是引用Gramary在2007-10-23 12:45:28的发言:
while(true)
{
try
{
m=Integer.parseInt(s);
break;
}
catch (Exception e)
{
System.out.println("please input a integer");
}


}
System.out.println(m);
写成这样就可以了

这样照道理本来是可以,不过由于对象没释放,一直在执行catch语句,break当然就没有用了啊。。

#12
zybin2007-10-24 15:31
回复:(hanssion)[求助]try{}catch{}语句实现循环时...
我也想知道
#13
hanssion2007-10-25 01:53

1