我希望系统在捕获InputMismatchException异常时可以交给我处理,比如打印“输入有误,请重新输入!”,然后我可以再次输入。比如下面这个switch,我想用以上方法检测每个nextDouble();
switch(k)
{
case 1:System.out.println("请输入三边长度");
i.setValue(x.nextDouble(),x.nextDouble(),x.nextDouble());i.getPerimeter();i.getArea();
count1++;
break;
case 2:System.out.println("请输入长和宽");
ii.setValue(x.nextDouble(),x.nextDouble());ii.getPerimeter();ii.getArea();
count2++;
break;
case 3:System.out.println("请输入半径");
iii.setValue(x.nextDouble());iii.getPerimeter();iii.getArea();
count3++;
break;
default:System.out.println("输入有误!");
}
}
我知道可以用下面的方法,但是好像对每个输入都要重复使用
for(;;){
try{Scanner x=new Scanner(System.in);
if(!x.hasNextInt())throw new InputMismatchException();
}catch(InputMismatchException e){
System.out.println("输入有误");
continue;
}
}
try
{
这里括住整个switch就好
}
catch(InputMismatchException e)
{
System.out.println("输入有误");
continue;
}
try
{
Scanner x=new Scanner(System.in);
if(!x.hasNextInt())throw new InputMismatchException();
}
catch(InputMismatchException e)
{
System.out.println("输入有误");
continue;
}
把switch放到try里面也不行
import java.util.*;
abstract class Ashape
{
abstract double getArea();
abstract double getPerimeter();
}
class Tri
{
double a,b,c,p;
void setValue(double a,double b,double c){
this.a=a;
this.b=b;
this.c=c;
}
void getArea(){
p=(a+b+c)/2;
System.out.println("三角形面积为"+Math.sqrt(p*(p-a)*(p-b)*(p-c)));
}
void getPerimeter(){
System.out.println("三角形周长为"+(a+b+c));
}
}
class Rect
{
double l,w;
void setValue(double l,double w){
this.l=l;
this.w=w;
}
void getArea(){
System.out.println("矩形面积为"+l*w);
}
void getPerimeter(){
System.out.println("三角形周长为"+2*(l+w));
}
}
class Circle
{
double r;
void setValue(double r){
this.r=r;
}
void getArea(){
System.out.println("圆形面积为"+Math.PI*r*r);
}
void getPerimeter(){
System.out.println("圆形周长为"+2*Math.PI*r);
}
}
class ShapeEx
{
static int count1,count2,count3;
static{
count1=0;
count2=0;
count3=0;}
public static void main(String[] args)
{
int k;
Scanner x=new Scanner(System.in);
Tri i=new Tri();
Rect ii=new Rect();
Circle iii=new Circle();
for(;;)
{
System.out.println("\n**已创建三角形"+count1+"个,"+
"矩形"+count2+"个,"+"圆形"+count3+"个**");
System.out.println("**创建三角形请按1,矩形按2,圆形按3**\n");
k=x.nextInt();
try{ switch(k)
{
case 1:System.out.println("请输入三边长度");
i.setValue(x.nextDouble(),x.nextDouble(),x.nextDouble());i.getPerimeter();i.getArea();
count1++;
break;
case 2:System.out.println("请输入长和宽");
ii.setValue(x.nextDouble(),x.nextDouble());ii.getPerimeter();ii.getArea();
count2++;
break;
case 3:System.out.println("请输入半径");
iii.setValue(x.nextDouble());iii.getPerimeter();iii.getArea();
count3++;
break;
default:System.out.println("输入有误!");
}
}catch(InputMismatchException e){System.out.println("输入有误!");
continue;
}
}
}
}