0

我是新手,我有以下代码运行良好,但是当我输入特殊字符(@、%、* 等)时,它必须抛出异常,所以我怎么能做到这一点,有人可以帮我吗?新手程序员

/* 检查值的代码*/

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CheckVal 
{
    public static void main(String args[]) 
{
    int i=0;
    double x=0;
    System.out.println("Enter your angle");
    try{
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    i=Integer.parseInt(br.readLine());

    }
    catch(Exception e)
    {
        System.out.println(e);
    }
    System.out.println(i);
    x=Math.sin(Math.toRadians(i));
    System.out.println(x);
    if(x>=0 && x<=0.5)
    {
        ButtonBackground frame = new ButtonBackground("green");
        //frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setResizable(false);

        frame.setVisible(true);


    }
    else{
        ButtonBackground frame = new ButtonBackground("red");
        //frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setResizable(false);

        frame.setVisible(true);
        }
    }
}

/按钮背景代码/

import java.awt.*;
import javax.swing.*;

public class ButtonBackground extends JFrame
{
    public ButtonBackground(String x)
    {
        setLayout( new FlowLayout() );
        //JButton normal = new JButton(" ");
        // add(normal);
        if(x.equals("green")) {
            JButton test1 = new JButton(" ")
            {
                @Override
                public void paintComponent(Graphics g)
                {
                    g.setColor( Color.GREEN );
                    g.fillRect(0, 0, getSize().width, getSize().height);
                    super.paintComponent(g);
                }
            };
            test1.setContentAreaFilled(false);
            test1.setBackground(Color.GREEN);
            add(test1);
        }
        else
        {
        JButton test1 = new JButton(" ")
            {
                @Override
                public void paintComponent(Graphics g)
                {
                    g.setColor( Color.RED );
                    g.fillRect(0, 0, getSize().width, getSize().height);
                    super.paintComponent(g);
                }
            };
            test1.setContentAreaFilled(false);
            test1.setBackground(Color.RED);
            add(test1);
        }
    }
}
4

1 回答 1

1

据我所知,它已经做到了,但你正在抓住它。作为一个建议,尽量避免 Pokémon try-catch 方法(“Gotta catch 'em all!” by catch a generic Exception)。

通过做

try {
    //your code
} catch (Exception e) {

}

您正在捕获 try 中的代码可能抛出的各种异常,而没有机会知道出了什么问题。如果您的应用程序失败,这将成为一场噩梦,因为它没有“中断”,但它没有做您希望它做的事情。

特别是你想得到一个整数,如果你得到特殊字符,你想抛出一个异常。IllegalArgumentException 似乎适合您的特定需求,因为特殊字符毕竟是非法参数。我建议不要使用这种输入阅读:

System.out.println("Enter your angle");
try{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
i=Integer.parseInt(br.readLine());

}
catch(Exception e)
{
    System.out.println(e);
}

你尝试这样的事情:

System.out.println("Enter your angle");
try{
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    i=Integer.parseInt(br.readLine());
}
catch(NumberFormatException e)
{
    throw new IllegalArgumentException();
}

如果我没记错的话,那就是你想要的。

作为旁注,请记住捕获该 IllegalArgumentException ,使其不会向上传播。要对此进行更好的管理,请尝试创建一个读取输入并返回 int 的函数,或者在特定情况下引发异常。

private int readEntry() throws IllegalArgumentException {
    try {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        i=Integer.parseInt(br.readLine());
    } catch(NumberFormatException e) {
        throw new IllegalArgumentException();
    }
}

然后你可以在你的 main 函数中调用它并做任何你认为必要的事情。这也提高了可读性。

int input = readEntry(); //Surround this with a try-catch and catch the IllegalArgumentException if you want to control it.
于 2012-09-21T18:13:16.393 回答