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 アプローチを避けるようにしてください (ジェネリックをキャッチして「全部捕まえなきゃ!」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();
    }
}

次に、メイン関数でそれを呼び出して、必要と思われることを何でも実行できます。これにより可読性も向上します。

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 に答える