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

public class PAC extends JFrame {
   private JTextField epsilon, delta, h, m, f, v;
   private JButton calculate;

   public PAC() {
       super();
       setSize(400,400);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       getContentPane().setLayout(new FlowLayout());

       epsilon = makeAndAdd("epsilon");
       delta = makeAndAdd("delta");
       h = makeAndAdd("H");
       f = makeAndAdd("Number of features");
       v = makeAndAdd("Number of values/feature");

       calculate = new JButton("Calculate");
       calculate.addActionListener(new Calculator());
       getContentPane().add(calculate);
 
       m = makeAndAdd("Minimum examples");
       m.setEditable(false);
   }

   private JTextField makeAndAdd(String label) {
       JTextField result = new JTextField(10);
       getContentPane().add(new JLabel(label));
       getContentPane().add(result);
       return result;
   }

   private class Calculator implements ActionListener {
       public void actionPerformed(ActionEvent e) {
           double ep = Double.parseDouble(epsilon.getText());
           double del = Double.parseDouble(delta.getText());

           int hyp = 0;
           try {
               int features = Integer.parseInt(f.getText());
               int values = Integer.parseInt(v.getText());
               hyp = (int)Math.pow(values, features);
           } catch (NumberFormatException nfe) {
               hyp = Integer.parseInt(h.getText());
           }

           double result = Math.log(del/hyp) / Math.log(1 - ep);
           m.setText(Formatter.format(result, 4));
       }
   }
    
   public static void main(String[] args) {
       new PAC().setVisible(true);
   }
}
