如何使用Java异常判断输入是否正确

时间:2019-07-17 23:39:54

标签: java

因此,我需要有关此代码的帮助。此代码将使用户输入一个双精度值,例如double radius。并计算圆的面积和周长。但是我需要检查半径是否正确,半径是否为负,以及用户是否输入了字符或字符串。因此,如果用户输入34.5gd,则代码应输出“无效的输入,请重试”,并使用循环再次输入该值。

我可以得到负数部分,并使用JOptionPane获得一个对话框,提示“无效的输入,请重试”,但是我无法检查输入的字符或字符串。

此代码用于驱动程序类

import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
public class CircleValidationApp1
{
public static void main(String[] args) 
    {
        JFrame frame = new JFrame();
        String line;
        Scanner input = new Scanner (System.in);
        System.out.println("Enter the radius");
        Circle obj = new Circle();
        NegativeDoubleException obj1 = new  NegativeDoubleException();
        line = input.next();
        /*line = input.nextDouble();
        obj.getradius(line);
        obj.area();
        obj.perimeter();*/
        obj1.Checkradius(line);
        if(obj1.Checkradius(line)==true)
        {
            System.out.println("valid input");
        }
        else 
        {
            JOptionPane.showMessageDialog(frame, "Error, Please try again");
            line = input.next();
        }
        input.close();
    }

}

此类用于计算面积和周长

public class Circle {
double radius;
double area;
double perimeter;
public Circle() {
}
public  double setradius(double r)
{
    this.radius=r;
    return radius; 
}
public void getradius(double r)
{
    setradius(r);
}
public void area()
{
    area=3.14*radius*radius;
    System.out.println("The area is:"+area);
}
public void perimeter()
{
    perimeter=2*3.14*radius;
    System.out.println("The perimeter is:"+perimeter);
}
}

此类处理异常和输入检查。

import javax.swing.JFrame;

public class NegativeDoubleException 
{
Double radius;
String line;
Boolean flag = radius instanceof Double;
Circle obj = new Circle();
JFrame frame = new JFrame();
public NegativeDoubleException()
{

}
public void getvalue(String r)
{
    r=this.line;
}

public void setvalue(String r)
{
    getvalue(r);
}
public Boolean Checkradius(String r)
{   
    Boolean flag = false;
        try 
            {
                radius = Double.parseDouble(line);
                flag = true;
            }catch( NumberFormatException e)
                {
                    flag = false;
                }
    return flag;

 }
}

2 个答案:

答案 0 :(得分:0)

这很容易,您可以将用户希望输入的代码括起来 与try ... catch语句 像这样

my_project_name.settings.prod

,当发生任何异常时,它将给出无效的输入消息,您可以关闭该消息并编写新的raduis,而不会导致程序崩溃

答案 1 :(得分:0)

第一个问题:,您必须使变量行加倍而不是String,并且在半径的setter和getters方法中,使setter加倍,并且它必须为空 并且吸气剂必须是双倍的,并且在吸气剂中您将编写return radius 然后您将进行以下更改

public class Circle2 {
double radius;
double area ;
double perimeter;

public  void setradius(double r)
{
this.radius=r;

}
public double getradius(){
return radius;
} 


public void perimeter()
{

System.out.println(2*3.14*radius);
}
public void area(){

area = Math.PI*radius*radius;
System.out.println(area);

}   
}

注意:我在数学类中使用pi方法来获得更准确的结果Math.PI

第二秒::我对您的主班做了一些修改

    public class mainc {

    public static void main(String[] args) throws IOException {
    double l;
    Circle2 obj = new Circle2();
    Scanner s;

    s = new Scanner(System.in);

    l = s.nextDouble();

    obj.setradius(l);
    obj.perimeter();
    obj.area();

如果有人未输入数字则作例外处理,您将通过尝试捕获将主代码中的所有代码括起来 你会做到的

public class mainc {

  public static void main(String[] args) throws IOException {
    double l;
    Circle2 obj = new Circle2();
    Scanner s;

   try{ 
    s = new Scanner(System.in);

    l = s.nextDouble();

    obj.setradius(l);
    obj.perimeter();
    obj.area();
   }catch(Exception e){
       System.out.println(e);
       System.out.println("enter a number");
       s = new Scanner(System.in);
       l = s.nextDouble();
    }

   }

   }

我们添加了s = new Scanner(System.in);和l = s.nextDouble();再次是因为如果发生异常,它将继续执行该操作并且不会关闭