Median berechnen

Lennardt

Mitglied
Hallo Forum,

ich verzweifel einfach an der Lösung dieses Fehlers. Die Java Konsole sagt folgendes:

Code:
Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 5
	at Median.btBerechnen_ActionPerformed(Median.java:56)
	at Median$1.actionPerformed(Median.java:25)
	at java.awt.Button.processActionEvent(Button.java:392)
	at java.awt.Button.processEvent(Button.java:360)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Was muss ich ändern?

Java:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Median extends Applet {
  // Anfang Attribute
  private TextArea taWerte = new TextArea("", 1, 1, TextArea.SCROLLBARS_NONE);
  private Button btBerechnen = new Button();
  private Label lbErgebnis = new Label();
  // Ende Attribute

  public void init() {
    Panel cp = new Panel(null);
    cp.setBounds(0, 0, 456, 190);
    add(cp);
    // Anfang Komponenten

    taWerte.setBounds(8, 8, 433, 89);
    taWerte.setText("");
    cp.add(taWerte);
    btBerechnen.setBounds(8, 104, 435, 25);
  btBerechnen.setLabel("Median berechnen");
    btBerechnen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        btBerechnen_ActionPerformed(evt);
      }
    });
    cp.add(btBerechnen);
  lbErgebnis.setBounds(8, 136, 429, 16);
    lbErgebnis.setText("");
    lbErgebnis.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
  lbErgebnis.setAlignment(Label.CENTER);
    cp.add(lbErgebnis);
    // Ende Komponenten

  }
  // Anfang Methoden
  public void btBerechnen_ActionPerformed(ActionEvent evt) {
    String eingabe = taWerte.getText();
    // Kommata durch Punkte ersetzten
    eingabe = eingabe.replace(",",".");
    int eingabeLaenge = eingabe.length();
    int anzahlElemente;
    double median;
    
    // String aus dem TF an Leerzeichen trennen und Elemente in AR
    String stWerte[] = eingabe.split(" ");

    // Elemente im String AR zählen, um Größe des Double AR zu erhalten
    anzahlElemente = stWerte.length;
    double Werte[] = new double[anzahlElemente];
    
    // Elemente aus dem String AR in den Double AR kopieren mit Fehlerbehandlung
    for(int i = 0; i <= anzahlElemente; i++) {
      try{
        Werte[i] = Double.valueOf(stWerte[i]);
      }
      catch(NumberFormatException e) {
        lbErgebnis.setText("Bitte geben Sie nur Zahlen getrennt von Leerzeichen ein.");
      }
    }

    // Array sortieren
    sortiere(Werte);

    // Hat der Array eine ungerade oder gerade Länge
    if(anzahlElemente % 2 == 0) {
      // Gerade
      double dbAnzahlElemente = (double) anzahlElemente;
      double dbhaelfteminuseins = dbAnzahlElemente - 0.5;
      double dbhaelftepluseins = dbAnzahlElemente + 0.5;
      int haelfteminuseins = (int) dbhaelfteminuseins;
      int haelftepluseins = (int) dbhaelftepluseins;
      
      median = (Werte[haelfteminuseins] +  Werte[haelftepluseins]) / 2;
    } else {
      // Ungerade
      median = Werte[anzahlElemente / 2];
    }

    // Double in String umwandeln, um in das LB schreiben zu können
    String sMedian = String.valueOf(median);
    
    lbErgebnis.setText("Der Median beträgt " + sMedian);
  }
  
  public void sortiere(double[] unsortierteWerte) {

  }
  // Ende Methoden

}
 

henpara

Bekanntes Mitglied
at Median$1.actionPerformed(Median.java:56)

genau da
Java:
 for(int i = 0; i <= anzahlElemente; i++) {
      try{
        Werte[i] = Double.valueOf(stWerte[i]);
      }
und zwar weil es heißen muss:
Java:
for(int i = 0; i < anzahlElemente; i++) {
      try{
        Werte[i] = Double.valueOf(stWerte[i]);
      }

sollte deinen fehler beheben (Arrays fangen bei 0 an zu zählen und gehen folglich nur bis "länge-1".

mfg
 

Lennardt

Mitglied
Irgendwas läuft immer noch schief. Manchmal klappt die Berechnung fehlerlos, aber manchmal werden auch Fehler ausgegeben. Beispielsweise wenn ich "1 2 3 4 5 6 7 8 9 10" eingebe. "1 2 3 4 5 6 7 8 9" klappt jedoch tadellos. Hinzugekommen ist neben Euer Änderung der Bubblesort Algorithmus.

Java:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Median extends Applet {
  // Anfang Attribute
  private TextArea taWerte = new TextArea("", 1, 1, TextArea.SCROLLBARS_NONE);
  private Button btBerechnen = new Button();
  private Label lbErgebnis = new Label();
  // Ende Attribute

  public void init() {
    Panel cp = new Panel(null);
    cp.setBounds(0, 0, 456, 190);
    add(cp);
    // Anfang Komponenten

    taWerte.setBounds(8, 8, 433, 89);
    taWerte.setText("");
    cp.add(taWerte);
    btBerechnen.setBounds(8, 104, 435, 25);
  btBerechnen.setLabel("Median berechnen");
    btBerechnen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        btBerechnen_ActionPerformed(evt);
      }
    });
    cp.add(btBerechnen);
  lbErgebnis.setBounds(8, 136, 429, 16);
    lbErgebnis.setText("");
    lbErgebnis.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
  lbErgebnis.setAlignment(Label.CENTER);
    cp.add(lbErgebnis);
    // Ende Komponenten

  }
  // Anfang Methoden
  public void btBerechnen_ActionPerformed(ActionEvent evt) {
    String eingabe = taWerte.getText();
    // Kommata durch Punkte ersetzten
    eingabe = eingabe.replace(",",".");
    int eingabeLaenge = eingabe.length();
    int anzahlElemente;
    double median;
    
    // String aus dem TF an Leerzeichen trennen und Elemente in AR
    String stWerte[] = eingabe.split(" ");

    // Elemente im String AR zählen, um Größe des Double AR zu erhalten
    anzahlElemente = stWerte.length;
    double Werte[] = new double[anzahlElemente];
    
    // Elemente aus dem String AR in den Double AR kopieren mit Fehlerbehandlung
    for(int i = 0; i < anzahlElemente; i++) {
      try{
        Werte[i] = Double.valueOf(stWerte[i]);
      }
      catch(NumberFormatException e) {
        lbErgebnis.setText("Bitte geben Sie nur Zahlen getrennt von Leerzeichen ein.");
      }
    }

    // Array sortieren
    sortiere(Werte);

    // Hat der Array eine ungerade oder gerade Länge
    if(anzahlElemente % 2 == 0) {
      // Gerade
      double dbAnzahlElemente = (double) anzahlElemente;
      double dbhaelfteminuseins = dbAnzahlElemente - 0.5;
      double dbhaelftepluseins = dbAnzahlElemente + 0.5;
      int haelfteminuseins = (int) dbhaelfteminuseins;
      int haelftepluseins = (int) dbhaelftepluseins;
      
      median = (Werte[haelfteminuseins] +  Werte[haelftepluseins]) / 2;
    } else {
      // Ungerade
      median = Werte[anzahlElemente / 2];
    }

    // Double in String umwandeln, um in das LB schreiben zu können
    String sMedian = String.valueOf(median);
    
    lbErgebnis.setText("Der Median beträgt " + sMedian);
  }
  
  public void sortiere(double[] x) {
    boolean unsortiert=true;
      double temp;

      while (unsortiert){
         unsortiert = false;
         for (int i=0; i < x.length-1; i++)
            if (x[i] > x[i+1]) {
               temp       = x[i];
               x[i]       = x[i+1];
               x[i+1]     = temp;
               unsortiert = true;
            }
      }
  }
  // Ende Methoden

}

Diese Fehlermeldung kommt:

Code:
Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 10
	at Median.btBerechnen_ActionPerformed(Median.java:75)
	at Median$1.actionPerformed(Median.java:25)
	at java.awt.Button.processActionEvent(Button.java:392)
	at java.awt.Button.processEvent(Button.java:360)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 

henpara

Bekanntes Mitglied
versuch doch erstmal selber dahinterzukommen, dei Fehlerart ist doch die gleiche wie eben. Auch die Zeile, in der der Fehler auftritt wird dir wieder angesagt (75).

Also guckst du, was wird in Zeile 75 gemacht, sind da Array-zugriffe. Wenn ja, welche und wo könnte die Exception ausgelöst werden.

Zur noch mit dem debugger durchs Programm und Werte anschauen.

Hilft dir übrigens auch für die Zukunft nur bedingt, wenn du bei jedem kleinen Fehler im Forum nachfragst, vor allem, wenn du nicht selber wenigstens ein bischen Zeit damit verbracht hast, das ganze zu lösen.

mfg
 

Lennardt

Mitglied
Hallo,

nein, da sind keine Array Zugriffe!

[JAVA=75]
median = (Werte[haelfteminuseins] + Werte[haelftepluseins]) / 2;
[/code]

Ich habe ein bisschen schulischen Zeitdruck mit dem Programm ;-) Und es hat mich schon eine Menge Ärger gekostet. Wäre nett, wenn du mir einfach ein bisschen direkter den Fehler nennen könntest. Was den ArrayIndexOutOfBounds Fehler auslöst kann ich nicht entdecken.

Gruß
 
G

Gast2

Gast
Hallo,

nein, da sind keine Array Zugriffe!

[JAVA=75]
median = (Werte[haelfteminuseins] + Werte[haelftepluseins]) / 2;
[/code]

Was ist die zitierte Zeile Code denn sonst für dich?
Du fragst den Array nach den gespeicherten Wert an dem Index haelfteminuseins und haelftepluseins. Der haelftepluseins wird wohl nicht vorhanden sein.
 

henpara

Bekanntes Mitglied
Ich habe ein bisschen schulischen Zeitdruck mit dem Programm

Das glaub ich dir gerne. Und ich kann dich beruhigen, es gibt sicher noch mehr Leute mit Zeitdruck.

Aber bedenke: Hier im Forum kann NIEMAND etwas dafür, daß du schulischen Zeitdruck hast.
Dafür bist DU ganz alleine verantwortlich.

@Problem:
mein Vorposter hat jetzt schon präzisiert, wo genau die Array-Zugriffe in der Zeile sind.

Das Forum ist dazu da, dir zu helfen, das tun wir. Wir sind aber nicht dazu da, Lösungen zu verschenken oder dir komplett deine Arbeit abzunehmen.

Kurz:
Problem lösen: DU
Ansätze/Hinweise bekommen: Forum.

Also schaust du dir jetzt die Zeile nochmal genau an, wo da auf das Array zugegriffen wird und überlegst dir, ob die Felder alle existieren (Der compiler sagt dir ja schon, daß mind. ein Feld nicht existiert)

und nicht vergessen:
Array[] a = new Array[5] hat werte von a[0] bis a[4]

edit: und zum thema zeitdruck: manchmal lieber 10min pause einlegen, durchatmen, wieder sammeln und dann weiterarbeiten. Dann kommt man idR schneller voran, als wenn man "mit zeitdruck"-Gefühl durcharbeitet und nix mehr rafft, weil einem alles zu Kopf steigt, oder wie du sagst man "konfus" wird.
Wir haben 15uhr, dann kommt Wochenende, woher kommt dein Zeitdruck? Bist du noch in der Schule oder was?
 
Zuletzt bearbeitet:

mariusbopp

Bekanntes Mitglied
ich denke henpara hat das ganz gut geschrieben und man sollte nicht wegen jeder kleinigkeit fragen sondern selbst mal überlegen!!

Code:
Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 10
könte ja vielleicht etwas mit der länge des arrays zu tun haben?!
 

mariusbopp

Bekanntes Mitglied
okay vill kommst du dann auf selbst auf die fehler und wie gesagt fragen ist ja nicht verboten mach dir nur vorher mal selber gedanken drüber:toll:
 

Lennardt

Mitglied
Hallo,

ich habe die entsprechende Stelle im Quelltext wie folgt geändert:

Java:
    // Hat der Array eine ungerade oder gerade Länge
    if(anzahlElemente % 2 == 0) {
      // Gerade
      double dbAnzahlElemente = (double) anzahlElemente;
      double dbhaelfteminuseins = dbAnzahlElemente / 2 - 0.5;
      double dbhaelftepluseins = dbAnzahlElemente / 2 + 0.5;
      int haelfteminuseins = (int) dbhaelfteminuseins;
      int haelftepluseins = (int) dbhaelftepluseins;
      
      median = (Werte[haelfteminuseins] +  Werte[haelftepluseins]) / 2;
    } else {
      // Ungerade
      median = Werte[anzahlElemente / 2];
    }

Hoffe damit den Fehler beseitigt zu haben :) Danke für eure Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Median berechnen, Benutzereingabe Problem! Java Basics - Anfänger-Themen 14
J Array Median bestimmen Java Basics - Anfänger-Themen 6
J Median-Berechnung von 2D-Teilarrays Java Basics - Anfänger-Themen 56
B Berechnung Median mit Methode Java Basics - Anfänger-Themen 7
4 Median ohne Array Rausbekommen Java Basics - Anfänger-Themen 8
Screen Wie geringste Absolutdifferenz zum Median bestimmen? Java Basics - Anfänger-Themen 8
StrikeTom Median ausrechnen Java Basics - Anfänger-Themen 3
A Median, Standardabweichung Java Basics - Anfänger-Themen 5
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
laxla123 Quersumme berechnen Java Basics - Anfänger-Themen 1
I For Schleife Summe berechnen Java Basics - Anfänger-Themen 13
S Vollmond berechnen und ausgeben Java Basics - Anfänger-Themen 12
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
A Berechnen Moor Nachbarschaft Java Basics - Anfänger-Themen 5
E Geburtstag im Schaltjahr berechnen Java Basics - Anfänger-Themen 24
Lion.King Schaltjahr berechnen Java Basics - Anfänger-Themen 31
E Alter (Laufzeit) berechnen Java Basics - Anfänger-Themen 11
I Zuschläge berechnen Java Basics - Anfänger-Themen 15
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
L Präfix berechnen Java Basics - Anfänger-Themen 33
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
I Potenz berechnen mit for-Schleife Java Basics - Anfänger-Themen 3
A Standardabweichung in Java berechnen Java Basics - Anfänger-Themen 10
H Gesamtabweichung mit Array berechnen Java Basics - Anfänger-Themen 2
G Java Rabatt berechnen Java Basics - Anfänger-Themen 8
V Rückgeld berechnen Java Basics - Anfänger-Themen 6
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
Ianatrix Zahlen von a bis b berechnen Java Basics - Anfänger-Themen 7
L Max, min, Summe und Durchschnitt berechnen Java Basics - Anfänger-Themen 4
L Anhalteweg berechnen Java Basics - Anfänger-Themen 6
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
M Quadratwurzel berechnen Java Basics - Anfänger-Themen 8
V Wachstum berechnen und in Ist-Formel verwenden Java Basics - Anfänger-Themen 5
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Abschreibungsplan berechnen Java Basics - Anfänger-Themen 23
V Gehalt berechnen in Java Java Basics - Anfänger-Themen 6
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
L Anzahl der benachbarten Minen berechnen und setzen Java Basics - Anfänger-Themen 15
J Array Speicherplatz berechnen Java Basics - Anfänger-Themen 35
H Eingabedaten berechnen Java Basics - Anfänger-Themen 9
B Tranportkosten berechnen mit unterschiedlichen MwSt Java Basics - Anfänger-Themen 9
L Anzahl der Paare deren Summe = 0 ergibt berechnen Java Basics - Anfänger-Themen 0
V Erste Schritte Berechnen von Sinus; sin(x) ohne Math.* Java Basics - Anfänger-Themen 1
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
N Ein Datum berechnen Java Basics - Anfänger-Themen 3
T Sparplan berechnen Java Basics - Anfänger-Themen 4
F Abstand zum Durchschnitt von 5 Zahlen berechnen... Java Basics - Anfänger-Themen 16
B java.util.Date berechnen Java Basics - Anfänger-Themen 11
P Mittelwert Arrayelemente berechnen Fehler Java Basics - Anfänger-Themen 5
CptK Best Practice Schussparabel berechnen Java Basics - Anfänger-Themen 3
T Modulo / Pow berechnen Java Basics - Anfänger-Themen 4
E Statistische Kennzahlen berechnen Java Basics - Anfänger-Themen 2
F Switch Case Modulo berechnen Java Basics - Anfänger-Themen 12
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
C Preis berechnen mit Java Java Basics - Anfänger-Themen 4
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
N Best Practice Image recognition fuzzy Superhash berechnen Java Basics - Anfänger-Themen 1
Dawinartor Erste Schritte Schaltjahr berechnen Java Basics - Anfänger-Themen 1
L Pi berechnen Java Basics - Anfänger-Themen 1
CptK Term (als String) berechnen und ausgeben Java Basics - Anfänger-Themen 10
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
J Variablen arithmetischen Mittelwert berechnen Java Basics - Anfänger-Themen 5
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
I Schnittpunkt zweier Geraden berechnen Java Basics - Anfänger-Themen 25
M Erste Schritte Mittelwert berechnen -> Methode in der Methode? Java Basics - Anfänger-Themen 14
S Compiler-Fehler Schaltjahr berechnen Java Basics - Anfänger-Themen 5
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
S Durchschnitt berechnen aus zwei Textfeldern Java Basics - Anfänger-Themen 21
D Summe berechnen mit verändertem Wert aus Schleife Java Basics - Anfänger-Themen 1
R Liga Berechnen Java Basics - Anfänger-Themen 1
P Klassen Berechnen mehrerer Map-Werte Java Basics - Anfänger-Themen 13
R Fussballtabellen berechnen Java Basics - Anfänger-Themen 12
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
F ISBN Prüfziffer berechnen Java Basics - Anfänger-Themen 17
F Die Teilersumme einer Eingabe berechnen Java Basics - Anfänger-Themen 11
S Negafibonacci Folge berechnen Java Basics - Anfänger-Themen 24
G Array Mittelwert berechnen, wie? Java Basics - Anfänger-Themen 8
S Primzahlen berechnen funktioniert nicht richtig Java Basics - Anfänger-Themen 1
N Mit LocalDate alter berechnen Java Basics - Anfänger-Themen 3
J Laufzeit berechnen/Laufzeitanalyse Java Basics - Anfänger-Themen 2
N Arrays mit Zufallzahlen füllen und Statistiken berechnen Java Basics - Anfänger-Themen 5
A Wochentag berechnen Java Basics - Anfänger-Themen 10
Ste3et_C0st Vectoren berechnen Java Basics - Anfänger-Themen 8
L Durchschnitt in der Schleife berechnen Java Basics - Anfänger-Themen 11
A Kreisumfang/-Fläche vom Kreis berechnen Java Basics - Anfänger-Themen 39
L Wochentag berechnen Java Basics - Anfänger-Themen 5
L Rekursive Methode a * b berechnen Java Basics - Anfänger-Themen 2
B OOP Summe aus verschiedenen Instanzen einer Klasse berechnen Java Basics - Anfänger-Themen 2
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
P Ausdrücke berechnen Java Basics - Anfänger-Themen 2
V Mittelwert berechnen Java Basics - Anfänger-Themen 31
H Datentypen Tage zwischen zwei Datums berechnen Java Basics - Anfänger-Themen 4
P Quadrate berechnen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben