Ich bräuchte Hilfe bei folgendem Problem:
Beim folgenden Programmcode gibt Eclipse mir jene Fehlermeldung aus:
Ich weiß einfach nicht, was ich dagegen tun kann. Schaut also bitte mal nach, was ich hier falsch gemacht hab.
Der Code geht hier noch weiter, ist aber glaub ich unrelevant für das Problem
Beim folgenden Programmcode gibt Eclipse mir jene Fehlermeldung aus:
Code:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 142, Size: 142
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.remove(Unknown Source)
at Primzahlen.entfernen(Primzahlen.java:63)
at Primzahlen.ergebnis(Primzahlen.java:58)
at Primzahlen.nenner(Primzahlen.java:53)
at Primzahlen.primzahlenGenerieren(Primzahlen.java:48)
at Primzahlen.main(Primzahlen.java:19)
Ich weiß einfach nicht, was ich dagegen tun kann. Schaut also bitte mal nach, was ich hier falsch gemacht hab.
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.Timer;
public class Primzahlen{
private int a = 5000; // Obere Grenze für die Berechnung
private Timer timer;
private int sec=0,min=0,hour=0,i,ii,j,k;
private long z=0,x=0,ex=(long)(Math.pow(2, 63)-1);
private ArrayList<Integer> al=new ArrayList<Integer>();
public static void main(String[] args) throws IOException {
Primzahlen pz = new Primzahlen();
pz.zeit();
pz.primzahlenGenerieren();
pz.schreiben();
}
/** Der Timer ist dafür da, am Ende anzuzeigen wie lange es gedauert hat,
* die Primzahlen zu berechnen (kommt bei größeren Zielwerten zum Tragen)*/
private void zeit() throws IOException{
timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
sec++;
if(sec==60){
sec=0;
min++;
}
if(min==60){
min=0;
hour++;
} } });
timer.start();
}
/* Die Vorgehensweise ist, dass Nicht-Primzahlen aus der ArrayList gelöscht werden */
private void primzahlenGenerieren() throws IOException{
for (int b = 1; b <= a; b+=2) {
al.add(b);
}
al.add(1, 2);
for (i = 1; i < al.size(); i++) {
ii = al.get(i);
nenner();
} }
private void nenner(){
for (j = 1; j < (int)(ii/2); j++) {
ergebnis();
} }
private void ergebnis(){
for (k = 1; k < (int)(ii/2); k++) {
entfernen();
} }
private void entfernen(){
if((float) ii/j==k){
al.remove(i);
}
...
Der Code geht hier noch weiter, ist aber glaub ich unrelevant für das Problem