Primzahlen
-
Da sieht man mal wieder, wie ein 4-zeiliges C++-Programm von dem Java-Kram total aufgebläht wird.
-
Die 4 Zeilen sind erstens kein vollständiges Programm und zweitens ist da auch keine graphische Benutzeroberfläche wie in diesem Java-Programm enthalten!
-
Stimm, aber in C++ benötigt man auch keine Grafik, um was auszutesten
btw, die isPrime-Funktion könnte noch gekürzt werden:
public boolean isPrime(int n) { for(int i=2;i <= Math.sqrt(n); ++i) if(n%i==0) return false; return true; }
-
Um dasselbe in Java zu machen braucht es gerade mal eine Zeile mehr, als in C++. Von aufblähen kann dann gar keine Rede sein. Wenn man allerdings Äpfel mit Birnen vergleicht ...
-
Stimm, aber in C++ benötigt man auch keine Grafik, um was auszutesten
voll trollig, denkst in Java braucht man eine GUI um was zu testen ?
-
Wer hat denn angefangen, um meinen Codeschnipsel ein "komplettes" Java-Prog drumrumzucoden?
-
Die vorgestellten Codeschnipsel sind aus meiner Sicht nicht korrekt.
0 und 1 sind keine Primzahlen und es gibt ja auch negative Primzahlen!Eine bereinigte Version mit grafischer Programmoberfläche und Eingabeüberprüfung:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Primzahl implements ActionListener { JFrame primFrame; JPanel primPanel, inPanel; JTextField number; JLabel primLabel; JButton testNumber; public Primzahl() { // Erzeugung und Einstellung des Frame primFrame = new JFrame( "Primzahltest" ); primFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); primFrame.setSize( new Dimension( 200, 150 ) ); // Erzeugung und Einstellung des Fensterpanel primPanel = new JPanel( new BorderLayout() ); primPanel.setBorder( BorderFactory.createEmptyBorder( 5, 5, 5, 5 ) ); // Erzeugung und Einstellung des Eingabepanel inPanel = new JPanel( new BorderLayout() ); inPanel.setBorder( BorderFactory.createEmptyBorder( 0, 0, 5, 0 ) ); // Erzeugung und Einstellung der Elemente des Fensterinhalt number = new JTextField( 2 ); primLabel = new JLabel( "", SwingConstants.CENTER ); testNumber = new JButton( "OK" ); // Erzeugung einer Ereignisüberwachung auf den OK-Button testNumber.addActionListener( this ); // Hinzufügung der Elemente zum Eingabepanel inPanel.add( number, BorderLayout.CENTER ); inPanel.add( testNumber, BorderLayout.EAST ); // Hinzufügung der Elemente zum Fensterpanel primPanel.add( inPanel, BorderLayout.NORTH ); primPanel.add( primLabel, BorderLayout.CENTER ); // Hinzufügung des Fensterpanel zum Frame primFrame.getContentPane().add( primPanel, BorderLayout.CENTER ); // Setzen des voreingestellten Button primFrame.getRootPane().setDefaultButton( testNumber ); // Sichtbarmachung des Frame primFrame.setVisible( true ); } public void actionPerformed( ActionEvent event ) { Integer n = 0; boolean eingabe = true; primLabel.setBorder( BorderFactory.createTitledBorder( "Auswertungsergebnis" ) ); try { // Eingabedaten auslesen n = Integer.parseInt( number.getText() ); } catch (NumberFormatException e) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>keine Ganzzahl</font></u></html>" ); eingabe = false; } if ( eingabe ) { // auf Primzahl testen if ( isPrim( n ) ) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=green>eine Primzahl</font></u></html>" ); } else { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>keine Primzahl</font></u></html>" ); } } } /** * Testet auf eine Primzahl. */ public static boolean isPrim( Integer n ) { boolean ergebnis = true; for( int i = 2; i <= Math.sqrt( Math.abs( n ) ); ++i ) { if ( n % i == 0 ) { ergebnis = false; break; } } if ( n == 0 || n == 1 ) { ergebnis = false; } return ergebnis; } /** * Erzeugt die Programmoberfläche und bringt sie auf das Bild. * Für die Thread-Sicherheit sollte diese Methode aus dem * Ereignisabfertigungs-Thread aufgerufen werden. */ public static void createAndShowGUI() { // Nutzung der voreingestellten Fenster-Dekoration JFrame.setDefaultLookAndFeelDecorated( true ); Primzahl prim = new Primzahl(); } public static void main( String[] args ) { // Aufgabe für den Ereignisabfertigungs-Thread: // Erzeugen und Anzeigen der Programmoberfläche javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } } ); } }
-
A schrieb:
es gibt ja auch negative Primzahlen!
Nein. Alle Primzahlen sind >= 2.
-
Was für ein Schwachsinn.
-
A schrieb:
Was für ein Schwachsinn.
http://en.wikipedia.org/wiki/Prime_number
In mathematics, a prime number (or prime) is a natural number greater than one whose only positive divisors are one and itself.
-
Jaja, du hast Recht. :p Schwarz auf weiß.
Geht auch in deutsch: http://de.wikipedia.org/wiki/Primzahlen
-
So, jetzt dürfte es korrekt sein.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Primelement implements ActionListener { JFrame primFrame; JPanel primPanel, inPanel; JTextField number; JLabel primLabel; JButton testNumber; public Primelement() { // Erzeugung und Einstellung des Frame primFrame = new JFrame( "Primelement" ); primFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); primFrame.setSize( new Dimension( 200, 150 ) ); // Erzeugung und Einstellung des Fensterpanel primPanel = new JPanel( new BorderLayout() ); primPanel.setBorder( BorderFactory.createEmptyBorder( 5, 5, 5, 5 ) ); // Erzeugung und Einstellung des Eingabepanel inPanel = new JPanel( new BorderLayout() ); inPanel.setBorder( BorderFactory.createEmptyBorder( 0, 0, 5, 0 ) ); // Erzeugung und Einstellung der Elemente des Fensterinhalt number = new JTextField( 2 ); primLabel = new JLabel( "", SwingConstants.CENTER ); testNumber = new JButton( "OK" ); // Erzeugung einer Ereignisüberwachung auf den OK-Button testNumber.addActionListener( this ); // Hinzufügung der Elemente zum Eingabepanel inPanel.add( number, BorderLayout.CENTER ); inPanel.add( testNumber, BorderLayout.EAST ); // Hinzufügung der Elemente zum Fensterpanel primPanel.add( inPanel, BorderLayout.NORTH ); primPanel.add( primLabel, BorderLayout.CENTER ); // Hinzufügung des Fensterpanel zum Frame primFrame.getContentPane().add( primPanel, BorderLayout.CENTER ); // Setzen des voreingestellten Button primFrame.getRootPane().setDefaultButton( testNumber ); // Sichtbarmachung des Frame primFrame.setVisible( true ); } public void actionPerformed( ActionEvent event ) { Integer n = 0; boolean eingabe = true; primLabel.setBorder( BorderFactory.createTitledBorder( "Auswertungsergebnis" ) ); try { // Eingabedaten auslesen n = Integer.parseInt( number.getText() ); } catch (NumberFormatException e) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>keine Ganzzahl</font></u></html>" ); eingabe = false; } if ( eingabe ) { // auf Primelement testen if ( isPrim( n ) ) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=green>ein Primelement</font></u></html>" ); } else { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>kein Primelement</font></u></html>" ); } } } /** * Testet auf eine Primelement. */ public static boolean isPrim( Integer n ) { boolean ergebnis = true; for( int i = 2; i <= Math.sqrt( Math.abs( n ) ); ++i ) { if ( n % i == 0 ) { ergebnis = false; break; } } if ( n == 0 || n == 1 ) { ergebnis = false; } return ergebnis; } /** * Erzeugt die Programmoberfläche und bringt sie auf das Bild. * Für die Thread-Sicherheit sollte diese Methode aus dem * Ereignisabfertigungs-Thread aufgerufen werden. */ public static void createAndShowGUI() { // Nutzung der voreingestellten Fenster-Dekoration JFrame.setDefaultLookAndFeelDecorated( true ); Primelement prim = new Primelement(); } public static void main( String[] args ) { // Aufgabe für den Ereignisabfertigungs-Thread: // Erzeugen und Anzeigen der Programmoberfläche javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } } ); } }
-
-
@ Gregor & Detector:
-
Dürfte ich einwenden, dass es sinnvoll wäre n == 0 || n == 1 vor der Wurzelberechnung und der dazugehörigen Schleife abzuprüfen?
Oder habt ihr alle zu viele CPU Cycles übrig?
-
Fuer die Eingabe in Java verwendet man
System.in
oder man kann auch
JOptionPane (Wenns ein wenig Graphisch sein darf)
verwenden.Hab's zwar nicht ausprobiert, aber so sollte man auch in Java Zeilen aus der Konsole einlesen können:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
und dann bei belieben in.readLine();