Universität Paderborn - Home Universität Paderborn
Die Universität der Informationsgesellschaft

Grundlagen der Programmierung 2 SS 2005 - Datei Prime.java

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

public class Prime extends JFrame
{
    JTextField numberEntry;

    public Prime()
    {
        super("Prime Checker");
        
        Container c = this.getContentPane();
        
        // Layout setzen
        c.setLayout(new FlowLayout(FlowLayout.CENTER));        

        // Eingabefeld und Label im Zentrum erzeugen.
        c.add(new JLabel("Enter a Number: ", JLabel.CENTER), BorderLayout.NORTH);
        numberEntry = new JTextField("", 15);
        c.add(numberEntry);

        // PrimeCalculator wird ActionListener des Eingabefeldes.
        numberEntry.addActionListener(new PrimeCalculator());
        
        // Fenster anzeigen
        setSize(200,100);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String args[])
    {
        JFrame f = new Prime();
    }
}


class PrimeCalculator implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        long number;
        long nextprime;

        // Ermittle die Zahl, die der Benutzer eingab.
        String entry = ((JTextField) e.getSource()).getText();

        try
        {
            number = Long.parseLong(entry);
        }
        catch (NumberFormatException ex)
        {
            JOptionPane.showMessageDialog(null, 
                    "Illegal Number!",
                    "Error!", JOptionPane.ERROR_MESSAGE);
            return;
        }

        // Wenn's eine Primzahl ist, sag es.
        if (isPrime(number))
        {
            JOptionPane.showMessageDialog(null, 
                    number + " is a prime.",
                    "Prime Calculation", JOptionPane.INFORMATION_MESSAGE);
        }
        else
        {
            // War keine. Rechne die nächste Primzahl aus.
            nextprime = number + 1;
            if (nextprime % 2 == 0) // Grade Zahlen testen wir gar nicht erst.
                nextprime++;

            while (!isPrime(nextprime))
                nextprime += 2;

            JOptionPane.showMessageDialog(null, 
                    number + " is not a prime.\nNext prime is " + nextprime+".",
                    "Prime Calculation", JOptionPane.INFORMATION_MESSAGE);

        }
    }

    boolean isPrime(long number)
    {
        // Prüft, ob number eine Primzahl ist.
        long divisor;

        if (number < 0) // Negativ. Berechne entsprechende Positive Zahl.
            number = -number;
        if (number < 4) // 1, 2 und 3 sind Primzahlen.
            return true;
        if (number % 2 == 0) // Alle grade Zahlen nicht.
            return false;

        divisor = 3; // Ungerade Zahlen ab 3 als Teiler ausprobieren.

        while (divisor * divisor <= number)
        {
            if (number % divisor == 0)
                return false;
            divisor = divisor + 2;
        }

        return true;
    }
}

Generiert mit Camelot | Probleme mit Camelot? | Geändert am: 20.05.2005