Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

Ruffyg

Mitglied
Hallöchen,
ich habe mir ein Programm geschrieben um alle Primzahlen in einem fest definierten Bereich heraus zu finden. Dabei habe ich einen Counter eingebaut um zu gucken wie lange mein Laptop für die Rechenoperationen braucht. Das Programm funktioniert bisher auch sehr gut, nur kann ich bei einer Eingabe ab ca. 100000 von einer Fehlermeldung ausgehen.

Java:
package eratosthenes;


import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

/**
 */
public class Eratosthenes {
    public static void main(String[] args) {

        
        int eingabe = 0;

        
        Scanner in = new Scanner(System.in);

        
        System.out.println("Geben Sie eine ganze Zahl ein, die größer als 1 ist. ");
        
        eingabe = in.nextInt();
      
        do {
            
            if (eingabe <= 1) {
                System.out.println("Ihre Eingabe muss größer als 1 sein.");
                System.out.println("Eingabe einer ganzen Zahl, die größer als 1 ist: ");
                
                eingabe = in.nextInt();
            }
        } while (eingabe <= 1);

        final long startTime = System.nanoTime();
        
        boolean[] teilbar = new boolean[eingabe + 1];

        for (int i = 2; i < teilbar.length; i++) {
            teilbar[i] = false;

        }

      
        for (int i = 2; i < teilbar.length; i++) {
            
            while (teilbar[i]) {   
            
                i++;
            }
            
            for (int j = i; j*i < eingabe; j++) {
                teilbar[i * j] = true;
                
            }
          
            if (! teilbar[i] && i < eingabe) {
                
                System.out.println("Die " + i + " ist eine Primzahl. ");
            }

        }
        final double duration = (System.nanoTime() - startTime)/1000000000.0;
        
        // double zeit = duration/1000000000.0;
        
        System.out.println(duration + " s");
    }
}

Es währe sehr cool wenn mir jemand helfen könnte, ich kann nicht verstehen wie mein Array nicht genügend Felder haben kann.
 

httpdigest

Top Contributor
Naja, du inkrementierst `i` der zweiten for-Schleife sowohl in dem Schleifeninkrement der for-Schleife als auch manuell innerhalb der Schleife, prüfst aber beim manuellen Inkrementieren nicht, ob `i` eventuell schon zu groß geworden ist und greifst auch immer einfach auf das Array an der Stelle `i` zu. Danach kann es sehr wohl sein, dass `i` größer ist als das Array:
Java:
for (int i = 2; i < teilbar.length; i++) {   
  while (teilbar[i]) { // <- hier könnte es knallen, nachdem die folgende Anweisung durchlaufen wurde
    i++; // <- hier wird i beliebig weit inkrementiert
  }
  for (int j = i; j*i < eingabe; j++) {
    teilbar[i * j] = true;
  }
  if (! teilbar[i] && i < eingabe) {
    System.out.println("Die " + i + " ist eine Primzahl. ");
  }
}
 

Ruffyg

Mitglied
Naja, du inkrementierst `i` der zweiten for-Schleife sowohl in dem Schleifeninkrement der for-Schleife als auch manuell innerhalb der Schleife, prüfst aber beim manuellen Inkrementieren nicht, ob `i` eventuell schon zu groß geworden ist und greifst auch immer einfach auf das Array an der Stelle `i` zu. Danach kann es sehr wohl sein, dass `i` größer ist als das Array:
Java:
for (int i = 2; i < teilbar.length; i++) {  
  while (teilbar[i]) { // <- hier könnte es knallen, nachdem die folgende Anweisung durchlaufen wurde
    i++; // <- hier wird i beliebig weit inkrementiert
  }
  for (int j = i; j*i < eingabe; j++) {
    teilbar[i * j] = true;
  }
  if (! teilbar[i] && i < eingabe) {
    System.out.println("Die " + i + " ist eine Primzahl. ");
  }
}
und wie löse ich das besser?
 

httpdigest

Top Contributor
Java:
import java.util.BitSet;
import java.util.stream.IntStream;
import static java.util.stream.IntStream.iterate;
public class Sieve {
    public static IntStream sieve(int n) {
        BitSet notPrime = new BitSet(n);
        int sqrtN = (int) Math.sqrt(n);
        for (int i = 2; i <= sqrtN; i = notPrime.nextClearBit(i + 1))
            for (int j = i * i; j <= n; j += i)
                notPrime.set(j, true);
        return iterate(2, i -> i < n, i -> notPrime.nextClearBit(i + 1));
    }
    public static void main(String[] args) {
        sieve(1000).forEach(i -> System.out.println(i + " ist eine Primzahl."));
    }
}
 

Ruffyg

Mitglied
Java:
import java.util.BitSet;
import java.util.stream.IntStream;
import static java.util.stream.IntStream.iterate;
public class Sieve {
    public static IntStream sieve(int n) {
        BitSet notPrime = new BitSet(n);
        int sqrtN = (int) Math.sqrt(n);
        for (int i = 2; i <= sqrtN; i = notPrime.nextClearBit(i + 1))
            for (int j = i * i; j <= n; j += i)
                notPrime.set(j, true);
        return iterate(2, i -> i < n, i -> notPrime.nextClearBit(i + 1));
    }
    public static void main(String[] args) {
        sieve(1000).forEach(i -> System.out.println(i + " ist eine Primzahl."));
    }
}
Diese Zeile
Java:
return iterate(2, i -> i < n, i -> notPrime.nextClearBit(i + 1));

funktioniert nicht, es kommt dieser Fehler

Multiple markers at this line
- The method iterate(int, IntUnaryOperator) in the type IntStream is not applicable for the arguments (int, (<no
type> i) -> {}, (<no type> i) -> {})
- Type mismatch: cannot convert from boolean to int
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
J Exception in thread "main" Java Basics - Anfänger-Themen 1
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
K Exception in thread "main" Java Basics - Anfänger-Themen 7
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
F Exception in thread main java.lang.StackOverflowError Java Basics - Anfänger-Themen 3
A Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 7
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
M Exception in thread "main" java.lang.NoClassDefFoundError: MeineKlasse Java Basics - Anfänger-Themen 12
S Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 11
S Umgebungsvariable Exception in thread "main" java.lang.UnsatisfiedLinkError: no J3D in java.librar y.path Java Basics - Anfänger-Themen 15
M Klassen Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 2
D Exception in thread "main" Java Basics - Anfänger-Themen 8
A Exception in thread "main" Java Basics - Anfänger-Themen 7
S Exception in thread "main" Java Basics - Anfänger-Themen 3
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4
L Bubblesort: Exception in Thread "main" Java Basics - Anfänger-Themen 5
A Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 16
A GELÖST -- Exception in thread "main" Java Basics - Anfänger-Themen 3
B Fehlermeldung - Exception in thread "main" java.lang.Error: Unresolved compilation pr Java Basics - Anfänger-Themen 16
E Fehler: "Exception in thread "main" java.lang.NoSuchMethodError" Java Basics - Anfänger-Themen 15
G Fehler: Exception in thread main java.lang.noClassDefFound Java Basics - Anfänger-Themen 7
L Exception in thread "main" java.util.NoSuchElement Java Basics - Anfänger-Themen 4
A Do/While Problem (Exception in thread "main" java. Java Basics - Anfänger-Themen 4
M "exception in thread "main" java.lang.NullPoi Java Basics - Anfänger-Themen 2
S Exception in thread "main" java.lang.UnsupportedCl Java Basics - Anfänger-Themen 4
P Exception in thread "main" Java Basics - Anfänger-Themen 4
V Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 21
S Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 3
NightmareVirus Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 8
A "Exception in thread "main" java.lang.NoCLass Java Basics - Anfänger-Themen 10
N exception in thread main . Java Basics - Anfänger-Themen 3
C Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 9
vogella Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 6
C exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 7
A Fehlermeldung: Exception in thread "main" java.lan Java Basics - Anfänger-Themen 3
H Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 3
R Exception in Thread "main" . Kommandozeile/Netbean Java Basics - Anfänger-Themen 8
L Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerEx Java Basics - Anfänger-Themen 10
B Exception in thread "main"... Java Basics - Anfänger-Themen 3
L Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 3
K Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 8
J Exception in thread "main" java.langClassNoFoundEr Java Basics - Anfänger-Themen 2
H Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 5
B Fehler: Exception in Thread "main" java.lang.NoCla Java Basics - Anfänger-Themen 2
G Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 2
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
D Exception in thread "AWT-EventQueue-0" Java Basics - Anfänger-Themen 8
C Exception in thread "AWT-EventQueue-0 Java Basics - Anfänger-Themen 15
M Exception in thread "AWT-EventQueue-0" Java Basics - Anfänger-Themen 7
1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Java Basics - Anfänger-Themen 5
A Exception aus Thread werfen Java Basics - Anfänger-Themen 14
J Datentypen Exception in thread "AWT-EventQueue-0"?? Java Basics - Anfänger-Themen 4
T Thread 2x starten verursacht Exception Java Basics - Anfänger-Themen 3
Y Exception in thread Java Basics - Anfänger-Themen 11
Spin Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: data must Java Basics - Anfänger-Themen 10
O java.lang.NoClassDefFoundError Exception in thread "mai Java Basics - Anfänger-Themen 5
S Exception in thread Java Basics - Anfänger-Themen 7
A Exception in thread "Thread-33" java.lang.NoClassD Java Basics - Anfänger-Themen 10
F Fehlermeldung: Exception in thread. Java Basics - Anfänger-Themen 17
G Exception in thread Java Basics - Anfänger-Themen 9
H exception in thread mainjava.lang.noclass ... Java Basics - Anfänger-Themen 3
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
1 Exception Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben