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


