2012-03-08 2 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 е) \t \t \t \t^ –

+0

возможно дубликат [Java ошибка недостижим поймать блок компилятор] (http://stackoverflow.com/questions/5899849/java-unreachable-catch-block-compiler-error) –

ответ

2

Для проверки отрицательного результата вам не нужно проверять отрицательный результат, ниже должно быть достаточно. Но при форматировании вам может понадобиться попытка.

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

Верно, но вы должны поймать NumberFormatException, если кто-то пытается передать «foo» в parseDouble(). –

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 никогда не выброшен в соответствующих если заявление".

В принципе, если утверждения не вызывают исключений.

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); 

    } 
}