Primzahlen



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


Anmelden zum Antworten