http://matthias-hielscher.de/blog/52/Java_Aller_Anfang_ist_schwer.html
Feb
16

[Java] Aller Anfang ist schwer

Nachdem ich das äußerst komplizierte "Hello World" programmiert hatte \:mrgreen\: ist mein erstes Java-Progrämmlein eines, das überprüft, ob eine Zahl eine Primzahl ist oder nicht:

Java-Code:
// Program which checks if a number is a prime number
public class Prime
{
	// Reads an integer number from the console
	// If this is not complicate …
	static int readInt ()
	{
		int bufferSize = 80;
		byte[] buffer = new byte[bufferSize];
		int characterCount = 0;

		String tmpStr = null;

		try
		{
			characterCount = System.in.read(buffer, 0, bufferSize);
		}
		catch (Exception e)
		{
			System.out.println("Error: " + e);
		}

		tmpStr = new String(buffer, 0, characterCount - 2);

		return Integer.parseInt(tmpStr);
	}

	// Checks if a number is a prime number
	static boolean checkPrime(int no)
	{
		return !((no == 1) | ((no > 3) && (no % 2 == 0)) | ((no > 3) &&
			(no % 3 == 0)));
	}

	// Main procedure
	public static void main(String[] args)
	{
		System.out.print("Number to be checked: ");

		try
		{
			int no = readInt ();

			if (checkPrime(no))
			{
				System.out.println(no + " is a prime number.");
			}
			else
			{
				System.out.println(no + " is NOT a prime number.");
			}
		}
		catch (Exception e)
		{
			System.out.println("Error: " + e);
		}
	}
}

Was mich persönlich sehr wundert ist, dass das Einlesen eines Integers höchst komplex ist und nicht, wie in vielen anderen Programmiersprachen, ein Einzeiler.

Bleibe auf dem Laufenden!

Wenn du den RSS-Feed abonnierst, wirst du über neue Blogeinträge benachrichtigt.

Kommentare

  • Niko
    02.03.2006, 19:10
  • Der Eintrag ist zwar etwas älter, aber da ich schon mal hier gelandet bin:

    // Reads an integer number from the console
    // This doesn't need to be complicate \;\-\)
    static int readInt() {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    try {
    return Integer.parseInt(in.readLine());
    } catch (Exception e) {
    System.out.println("Error: " + e);
    return 0;
    }
    }
  • 3_of_8
    14.04.2006, 00:41
  • Ich will ja nix sagen, aber dein Primzahltest is ned so ganz korrekt.

    Probier mal aus 169. Primzahl? Nein, da teilbar durch 13. Wenn ich recht sehe, werden zum Beispiel die Quadrate aller Primzahlen>3 auch als Primzahlen erkannt.
  • 3_of_8
    14.04.2006, 18:24
  • public static boolean isPrime(int n){
    if(n==1) return false;
    if(n%2==0) return false;
    for(int i=3;i*i
  • Matze
    (registriert)
    14.04.2006, 23:18
  • Hm, wahrscheinlich kommt man wirklich nicht um eine Schleife herum, da hatte ich wohl einen gehörigen Denkfehler.
  • 3_of_8
    14.04.2006, 23:40
  • Man kann rundrumkommen, wenn überprüft, ob die Zahl eine der Primzahlen bis Integer.MAX_VALUE ist. \:D

    Ansonsten gehts ned ohne Schleife.

    Ich sehs grad, mein Code oben wurde abgeschnitten. Eigentlich muss es heißen:

    public static boolean isPrime(int n){
    if(n==1) return false;
    if(n%2==0) return false;
    for(int i=3;i*i
  • 3_of_8
    14.04.2006, 23:40
  • Schon wieder abgeschnitten? Ich glaube, dein Blogsystem hat ein Problem mit < Zeichen.
  • 3_of_8
    14.04.2006, 23:41
  • public static boolean isPrime(int n){
    if(n==1) return false;
    if(n%2==0) return false;
    for(int i=3;i*i<=n;i++) return false;
    return true;
    }

    Aha, siehe da, wenn man die < Zeichen schön mit < maskiert, gehts.
  • Matze
    (registriert)
    15.04.2006, 11:36
  • Dankesehr, guck ich mir dann mal an.
    Mal sehen, ob ich hier html-Codes verbiete und ein htlmstripslashes() drüberlaufen lasse. \:\)

Einen Kommentar schreiben

 
 
  • : *
  • :
  • : *
* Pflichtfelder