Fehler Java Primzahlenauswertung

p4man

Grünschnabel
hi leute, hab folgendes problem:

Das Programm soll einfach alle primzahlen ausgebengeben bis zum eingegebenen wert.
Code:
import java.util.Scanner;

public class Blatt4Aufgabe {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner eingabe = new Scanner(System.in);
        System.out.print("Schranke eingeben : ");
        int schranke = eingabe.nextInt();
        int [] zahlen = befuellen(schranke);
        int [] zahlen2 = sieben(zahlen);
        ausgabe(zahlen2);
    
    }
    public static int[] befuellen(int schranke) {
    int [] befueller = new int[schranke];
    
    for (int i = 1; i < befueller.length; i++) {
        befueller[i]= i + 1;
    }
    return befueller;
    }

    public static int[] sieben(int [] zahlen) {

        for (int i = 1; i < zahlen.length; i++) {
            for (int j = 2; j < zahlen.length; j++) {
        if (zahlen[j] <=2 || zahlen[j] % zahlen[i]== 0) {
            zahlen[j] = 0;
        }   
        }
    }    
        return zahlen;
    }
 
    public static int [] ausgabe(int [] zahlen2) {
        
      for (int i = 1; i < zahlen2.length; i++) {
      if( zahlen2[i] != 0 ) {
      System.out.print(zahlen2[i]+ ", ");
    }
    }    
      return zahlen2;  
    }
}

Sobald ich eine zahl über 4 eingebem kommt ein fehler.

1.Methde schreibet alle werte von 1- eingabe zahlen in ein array.
2. Methode soll alle nicht primzahlen auf 0 setzen im array.
3.Methode ausgabe aller werte des arrays != 0;

bim am verzeifeln und komme nichtr auf den fehler..

Eclipse sagt, methode 2 hat einen fehler.
 
Und welchen Fehler?

Bitte Netiquette §15 beachten.

PS: Generell würden zwei Dinge gut tun:
a) eine ordentliche Einrückung
b) Schleifen bei 0 beginnen
 
Schranke eingeben : 5
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Blatt4Aufgabe.sieben(Blatt4Aufgabe.java:34)
at Blatt4Aufgabe.main(Blatt4Aufgabe.java:12)


wird von eclipse
 
Du dividierst beim Modulo durch 0.
Mach ein if, damit das nicht passiert.

Und generell ist dein Code ziemlich wacklig...
Verbesserung kommt...

edit:
Java:
import java.util.Scanner;

public class Blatt4Aufgabe {

	public static void main(String[] args) {
		Scanner eingabe = new Scanner(System.in);
		System.out.print("Schranke eingeben : ");
		ausgabe(sieben(befuellen(eingabe.nextInt())));
	}

	public static int[] befuellen(int schranke) {
		int [] befueller = new int[schranke + 1];
		for (int i = 0; i < befueller.length; i++)
			befueller[i]= i;
		return befueller;
	}

	public static int[] sieben(int[] zahlen) {
		for (int i = 0; i < zahlen.length; i++) {
			if (zahlen[i] != 0) {
				for (int j = 2 * i; j < zahlen.length; j += i)
					zahlen[i] = 0;
			}
		}    
		return zahlen;
	}

	public static int[] ausgabe(int[] zahlen) {
		for (int i = 0; i < zahlen.length; i++) {
			if( zahlen[i] != 0 )
				System.out.print(zahlen2[i]+ ", ");
		}    
		return zahlen2;  
	}
}
Ungetestet.

Gruß
 
Divisionen durch Null,
Schleifen die nicht alles durchlaufen,
Ausgabe falscher Zahlen (um eins verschoben)...

Nochmal: Netiquette
 
Zurück