2012-03-08 18 views
0

このコードでは多くの問題が発生しています。コードをコンパイルして実行してから、例外をキャッチする前に想定していたコードを実行しようとしました。それから私はもうコンパイルすることができませんでした。ユーザーが負の数を入力した場合、例外をキャッチしてエラーメッセージを生成することが考えられます。例外をコンパイル/キャッチ

import java.awt.event.ActionEvent; //Next group of lines import various Java classes 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JCheckBox; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.GridLayout; 
import java.text.*; 
import java.io.IOException; 

public class SquareRoot extends JFrame 
{ 
    public static void main(String[] args) { 
     //Creates Window 
     JFrame frame = new JFrame(); 
     frame.setSize(450, 300); 
     frame.setTitle("Find the Square Root"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel Numberlbl = new JLabel("Enter a number:"); 
     final JTextField NumberField = new JTextField(10); 
     NumberField.setText(""); 

     JLabel Answerlbl = new JLabel("Square Root of your number is:"); 
     final JTextField AnswerField = new JTextField(10); 
     AnswerField.setText(""); 

     JLabel ButtonLabel = new JLabel("Calculate Square Root"); 
     JButton button = new JButton("Find Square Root"); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(3,2)); 
     panel.add(Numberlbl); 
     panel.add(NumberField); 
     panel.add(ButtonLabel); 
     panel.add(button); 
     panel.add(Answerlbl); 
     panel.add(AnswerField); 
     frame.add(panel); 

     class CalculateListener implements ActionListener { 

      public void actionPerformed(ActionEvent event) { 

       double NumberX = Double.parseDouble(NumberField.getText()); 
       try 
       { 
        if(NumberX >=0); 
       } 
       catch(IOException e) 
       { 
        System.out.println("Number can not be negative."); 
       } 
       double Answer = Math.sqrt(NumberX); 
       AnswerField.setText(String.valueOf(Answer)); 

      } 
     } 

     ActionListener listener = new CalculateListener(); 
     button.addActionListener(listener); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     } 
    } 
+0

コンパイル時にエラーが発生しましたか? –

+0

SquareRoot.java:61:例外にjava.io.IOExceptionがtry文を対応のボディでスローされることはありません \t \t \t \tキャッチ(のIOException e)の \t \t \t \t^ –

+0

の可能重複[Javaの到達不能catchブロックのコンパイラエラー] (http://stackoverflow.com/questions/5899849/java-unreachable-catch-block-compiler-error) –

答えて

2

マイナスチェックにtry-catchは必要ありません。以下で十分です。しかし、あなたがフォーマットするときにtry-catchが必要な場合があります。

double noX = 0; 
try { 
    noX = Double.parseDouble(NumberField.getText()); 
} catch(NumberFormatException e) { 
    System.out.println("Not a valid number"); 
} 
if(noX < 0) { 
    System.out.println("Number can not be negative."); 
} 
+0

Trueですが、誰かが "foo"をparseDouble()に渡そうとすると、NumberFormatExceptionを捕捉する必要があります。 –

0

使用してその優れた:

double NumberX = Double.parseDouble(NumberField.getText()); 
      if(NumberX <=0){ 
      System.out.println("Number can not be negative."); 
      } 
double Answer = Math.sqrt(NumberX); 
AnswerField.setText(String.valueOf(Answer)); 
+0

ええ、私の任務のためには、私は例外をキャッチする必要があります。 –

0

Netbeansのは、 "例外にjava.io.IOExceptionがif文対応でスローされることはありません" と言います。

基本的にif文は例外をスローしません。

0

それは良い実行されている

   try 
       { 
        if(NumberX >=0); 
        else 
         throw new Exception("Number Negative"); 
       } 
       catch(Exception e) 
       { 
        System.out.println("Number can not be negative."+e.getMessage()); 
       } 
0

...カスタム例外を投げます。

 package com.test; 

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class SquareRoot extends JFrame { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public static void main(String[] args) { 
    // Creates Window 
    JFrame frame = new JFrame(); 
    frame.setSize(450, 300); 
    frame.setTitle("Find the Square Root"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JLabel Numberlbl = new JLabel("Enter a number:"); 
    final JTextField NumberField = new JTextField(10); 
    NumberField.setText(""); 

    JLabel Answerlbl = new JLabel("Square Root of your number is:"); 
    final JTextField AnswerField = new JTextField(10); 
    AnswerField.setText(""); 

    JLabel ButtonLabel = new JLabel("Calculate Square Root"); 
    JButton button = new JButton("Find Square Root"); 

    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout(3, 2)); 
    panel.add(Numberlbl); 
    panel.add(NumberField); 
    panel.add(ButtonLabel); 
    panel.add(button); 
    panel.add(Answerlbl); 
    panel.add(AnswerField); 
    frame.add(panel); 

    class CalculateListener implements ActionListener { 

     public void actionPerformed(ActionEvent event) { 

     double NumberX; 
     try { 
      NumberX = Double.parseDouble(NumberField.getText()); 

      if (NumberX < 0) { 
      AnswerField.setText("Please enter positive value."); 
      } 
      else if (NumberX >= 0) { 
      double Answer = Math.sqrt(NumberX); 
      AnswerField.setText(String.valueOf(Answer)); 
      } 
     } 
     catch (NumberFormatException e) { 
      AnswerField.setText("Incorrect number entered."); 
      e.printStackTrace(); 
     } 
     } 
    } 

    ActionListener listener = new CalculateListener(); 
    button.addActionListener(listener); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

    } 
}