Java: Wieso bekomme ich diesen Fehler ("ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 9")?

Bei meinem Code kommt nach der Eingabe eines Wortes immer folgender Fehler.

Das ist alles von der Konsole:

Bitte geben Sie ein Wort für das B-Sprachen Spiel ein: Hallo
5
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 9
at B_SprachenSpiel/Lektion_7.B_SprachenSpiel.Spiel(B_SprachenSpiel.java:42)
at B_SprachenSpiel/Lektion_7.B_SprachenSpiel.main(B_SprachenSpiel.java:14)

Danach sollte eigentlich noch das Wort (in dem Fall Hallo) ausgegeben werden, nur dass es durch die Änderung dann Haballobo heißt. Das soll das Programm machen. Doch ich verstehe nicht, wieso immer wieder dieser Fehler kommt.

Folgendes ist mein kompletter Code von diesem Programm:

package Lektion_7;

import java.lang.reflect.Array;
import java.util.Scanner;

public class B_SprachenSpiel {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Bitte geben Sie ein Wort für das B-Sprachen Spiel ein: ");
    String B = sc.nextLine();
    Spiel(B);

    // System.out.println("Das umgewandelte Wort lautet: " + Spiel(B));
  }

  public static void Spiel(String Wort) {
    char[] x = new char [100];
    x = Wort.toCharArray();
    System.out.println(x.length);
    int y = x.length;
    int lang = x.length;

    for (int i = 0; i < y; i++) {
      if (x[i] == 'a' || x[i] == 'e' || x[i] == 'i' || x[i] == 'o' || x[i] == 'u') {
        lang += 2;
      }
    }

    System.out.println(lang);
    char[] neu = new char[lang];

    for (int i = 0; i <= neu.length; i++) {
      if (neu[i] == 'a' || neu[i] == 'e' || neu[i] == 'i' || neu[i] == 'o' || neu[i] == 'u') {
        neu[i] = (char) (x[i] + 'b' + (char) x[i]);
      }
    }

    String z = x.toString();
    System.out.println("                         Das umgewandelte Wort lautet: " + String.valueOf(neu));
    // for (int i = 0; i <= x.length; i++)
    //		{
    //			System.out.print(x[i]);
    //		}
  }
}
Computer, programmieren, Java, Array, Informatik
Php array Werte zuordnen?

Hallo ich hätte noch eine kurze Frage:

Ich habe eine JSON Ausgabe (siehe Bild1), in der jedem Tag gemessene Werte zum Schlaf angelegt sind. Jetzt möchte ich jedem Tag (["date"], in gelb markiert, die drei jeweiligen Messwerte ["wakeupcount"], ["total_timeinbed"] und ["total_sleep_time"] (in rot markiert) zuordnen. Das "date" habe ich als array angelegt. Die drei Messwerte sind jedoch "objects". Nachdem ich die Messwerte ausgelesen habe, möchte ich diese in meiner Datenbank entsprechend anlegen (letzter Teil meines Codes).

Bild 1:

Dazu verwende ich folgenden Code (Zur besseren Übersicht habe ich dieses mal nur den [wakeupcount] Messwert in den Code gepackt):

{
    $sleepanalyzer_sum_result = array();


    foreach ($sleepanalyzer_sum_data->body->series as $serie) {
        $sleepanalyzer_sum_result[$serie->date] = $measure;
        $sleepanalyzer_sum_result[$serie->data->wakeupcount] = $wakeupcount;


    }


    echo "<pre>";
    print_r($sleepanalyzer_sum_result);
    echo "</pre>";


    foreach ($sleepanalyzer_sum_result as $date => $measures) {


        $sleepanalyzer_sum_query .= "INSERT INTO sleepanalyzer_sum_measures SET
                wakeupcount ='" . $wakeupcount . "',
                measure_timestamp =  '" . $date . "'
                                ;";
    }
    echo "<pre>";
    echo $sleepanalyzer_sum_query;
    echo "</pre>";
}

Meine Ausgabe sieht folgendermaßen aus:

Dabei habe ich das Problem, dass die einzelnen Messwerte nun auch als array angelegt sind. Wie schaffe ich es, dass diese jedoch dem einzelnen Datum als object zugeordnet werden? Dadurch passiert auch beim Einlesen der Datenbank der Fehler, dass ich die richtigen Werte nicht den richtigen Begriffen in meiner Tabelle zuordnen kann.

Vielen Dank!

Bild zum Beitrag
Computer, Array, Datenbank, PHP
Array in ein anderes Array absteigend sortieren - Java?

Hallo Zusammen,

ich würde gerne ein Array in ein anderes Array absteigend sortieren.

Wenn ich in der for-Schleife und auch im weiteren Verlauf immer den letzen Index, also hier 3 manuell eingebe, läuft mein Programm tadellos. Jedoch möchte ich nicht von einer bestimmten Array-Länge abhängig sein und deshalb die Abbruchbedingung "hoch.length" anstatt eines festen Indexes nutzen, damit ich das Array auch ggf. erweitern kann.

Hier habe ich aber irgendwo einen Fehler und finde einfach nicht warum ich einen "Index out of bound" Fehler in der kursiv markierten Zeile erhalte.

Kann mir vielleicht jemand sagen wo mein Fehler liegt?

Danke!

public static void main(String[] args) {
      //   Index   =            0,1,2,3
         int [] hoch = new int []{2,3,4,5};            
         // neues array "runter" erstellen mit der Länge von Array "hoch"
         int [] runter = new int [hoch.length];
         // Start bei 0, Ende bei hoch.length
         for(int i=0; i <= hoch.length; i++) {
         // Hilfsvariable "hilfe" einbauen     
         int hilfe;                                    
  // hoch.length ist mein letzter Durchgang, -1 da ich eine Position mehr habe als dass ich einen Index habe
         runter [i] = hoch [hoch.length -i -1];
         hilfe = runter [i];
         }     
         // Ausgabe
         System.out.println("Array hoch:" + " " + Arrays.toString(hoch));
         System.out.println("Array runter:" + " " + Arrays.toString(runter));
         }}
Computer, Schule, programmieren, Java, Array
PHP Pascalsches Dreieck?

Hallo,

bin grad am "tüfteln" vom Pascalschen Dreieck und habe 2 Probleme:

Wieso haben bei mir die Zellen unterschiedliche Breiten, und, was ist der einfachste weg, dass es auch ausschaut wie ein Pascalsches Dreieck und nicht alles lin ksbündig ist?

Code

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Pascal'sches Dreieck</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
    <style>
    
    .table {
    font-family: Arial, Helvetica, sans-serif;
    border-style: solid 1px;
    border-spacing: 1;
    border-collapse: collapse;
    overflow: hidden;
    width: 70%;
    margin: 0 auto;
    position: relative;    
    }
    
    .zellen {
        border: 1px solid #000;
    }
    </style>
</head>
<body bgcolor=#DDDDDD text=#0000AA>

<form action="<?php $PHP_SELF ?>" method="post">
<pre>
eingabe:   <input type="text" name = "eingabe" size="4">


<input type="submit" name="schalter" value="OK">
</pre>
</form>

<?php

if(isset($_POST["schalter"])){
    
    $eingabe = $_POST["eingabe"];
    
    
    print "<table class=\"table\">";
    
    for($zeile = 1; $zeile <= $eingabe; $zeile++){ //Zeilen
        print "<tr>";
        for($spalte = 1; $spalte <= $zeile; $spalte++){ //Spalten
        
            if($spalte == 1 OR $spalte == $zeile){
                $array[$zeile][$spalte] = 1;
                print "<th class=\"zellen\">".$array[$zeile][$spalte]."</th>";
                

                
            }else{
                $array[$zeile][$spalte] = $array[$zeile-1][$spalte-1] + $array[$zeile-1][$spalte];
                
                print "<th class=\"zellen\">".$array[$zeile][$spalte]."</th>";
                
            }

            // $array[$i][$j] = 1;
        
            
        }    
    }
    print "</tr></table>";
    
    
    print "<pre>";
    print_r($array);
    print "</pre>";
}
?>
</body>

</html>

Ausgabe:

Bild zum Beitrag
Computer, programmieren, CSS, Infos, Array, Informatik, PHP, pascalsches-dreieck
Bug in meinen schach spiel(C++)?

ich arbeite an einen schach Programm und ich habe ein bug den ich nicht herausfinden kann. Ich arbeite mit einen 2d array und kann die Figuren wählen und Sie auf ein belibigen ort verschieben aber wenn ich es mache ist bei "Variable [0][0]" plötzlich garnichts mehr.

Hier der code:

#include <iostream>
using namespace std;
int a,b,c,d,e,f,ende;
int schwarz;
int weis=1;
int bewegung;
int x;
int y;
 char figur[8][8]=
{
't','s','l','k','d','l','s','t',
'b','b','b','b','b','b','b','b',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
'B','B','B','B','B','B','B','B',
'T','S','L','K','D','L','S','T'
};
int main()
{
   while(x!=8)
   {
       cout<<figur[x][y];
       y++;
       if(y==8)
       {
           x++;
           y=0;
           cout<<endl;
       }
   }
while(ende!=1)
{
   if(weis==1)
   {
   cout<<"was wollen sie bewegen weis?"<<endl;
   cout<<"x:";
   cin>>e;
   cout<<endl;
   cout<<"y:";
   cin>>f;
   cout<<endl;
   cout<<figur [e][f]<<" wird verschoben"<<endl;
   cout<<"wohin?"<<endl<<"x"<<endl;
   cin>>a;
   cout<<"y"<<endl;
   cin>>b;
   cout<<endl;
   figur[c][d]=figur[a][b];
   figur[a][b]=figur[e][f];
   figur[e][f]=figur[a][b];
   figur[e][f]=figur[c][d];
 //     figur[0][0]='t';
x=0;
y=0;
   while(x!=8)
   {
       cout<<figur[x][y];
       y++;
       if(y==8)
       {
           x++;
           y=0;
           cout<<endl;
       }
   }
//schwarz nicht fertig
schwarz++;
weis--;
   }
if(schwarz==1)
   {
   cout<<"was wollen sie bewegen schwarz?"<<endl;
   cout<<"x:";
   cin>>x;
   cout<<endl;
   cout<<"y:";
   cin>>y;
   cout<<endl;
   cout<<figur [x][y]<<" wird verschoben"<<endl;
   cout<<"wohin?"<<endl<<"x"<<endl;
   cin>>a;
   cout<<"y"<<endl;
   cin>>b;
   cout<<endl;
   figur[c][d]=figur[a][b];
   figur[a][b]=figur[x][y];
   figur[x][y]=figur[a][b];
   figur[x][y]=figur[c][d];
   if(x!=0)
   {
       if(y!=0)
       {
       figur[0][0]='t';
       }
   }
   x=0;
   y=0;
   while(x!=8)
   {
       cout<<figur[x][y];
       y++;
       if(y==8)
       {
           x++;
           y=0;
           cout<<endl;
       }
   }
cout<<"wollen sie es beenden? 1=ja 0=nein"<<endl;
cin>>ende;
weis++;
schwarz--;
   }
}
}

vielen dank ihn vorraus

Bild zum Beitrag
Computer, Schule, programmieren, Array, Bug
Java: Wie kann ich die Werte für die Matrix einlesen, nachdem ich die Spalte und Zeile eingelesen habe?

Ich stecke bei einer Aufgabe leider etwas fest.

Schreiben Sie ein Programm  Matrix, welches ein zweidimensionales Array übergeben bekommt und die Summe aller Werte in diesem Array berechnet.
Das erste, von der Konsole übergebene Argument, ist die Anzahl der Zeilen. Das zweite die Anzahl der Spalten des Arrays. Die restlichen Argumente sind Werte, mit denen das Array gefüllt werden soll. Gehen Sie davon aus, dass nur ganze Zahlen (positiv und negativ) übergeben werden.
Ihr Programm soll erst die Summe und anschließend die gesamte Matrix zeilenweise ausgeben. Falls zu wenige, oder zu viele Argumente von der Konsole übergeben werden oder die übergebenen Größenwerte negativ sind, soll Ihr Programm eine Fehlermeldung ausgeben, welche das Wort  ERROR enthält.
Eine Matrix der Größe 0 x 0
0×0 zählt als valide Matrix und hat die Summe $0$.

Ich habe bereits einen Ansatz zum Einlesen der Matrix. Dieser funktioniert aber nicht so ganz und ist noch unvollständig, da ich bei einigen Sachen nicht weiter komme.

Zum Beispiel, wie ich die Werte einlesen soll, nachdem ich die Spalte und Zeile eingelesen habe.

public class Matrix {
  public static void main(String[] args) {
    int zeile = Integer.parseInt(args[0]);
    int spalte = Integer.parseInt(args[1]);
    int Werte = Integer.parseInt(args[2]);
    int sum = 0;

    int[][] matrix = new int[zeile][spalte];

    for (int i = 0; i < zeile; i++) {
      for (int j = 0; j < spalte; j++) {
        matrix[i][j] = ???
        sum = matrix[i][j] + matrix[i][j];
      }

      System.out.println(sum);
      System.out.println(matrix[i][j]);
    }            
Schule, programmieren, Java, Array, Matrix
Java Arrays richtig vergleichen?

Ich möchte in meinem Lotto-Programm ein Spieler-Tipp-Array mit einem Lotto-Wahl-Array vergleichen. Dazu habe ich mal zum Testen diesen Code erstellt.

Hier der Code zum Kopieren:

String[] LottoZahlen = new String[6];
String[] SpielerZahlen = new String[6];

LottoZahlen[0] = Integer.toString(12);
LottoZahlen[1] = Integer.toString(14);
LottoZahlen[2] = Integer.toString(7);
LottoZahlen[3] = Integer.toString(18);
LottoZahlen[4] = Integer.toString(5);
LottoZahlen[5] = Integer.toString(49);

SpielerZahlen[0] = Integer.toString(12);
SpielerZahlen[1] = Integer.toString(7);
SpielerZahlen[2] = Integer.toString(5);
SpielerZahlen[3] = Integer.toString(18);
SpielerZahlen[4] = Integer.toString(13);
SpielerZahlen[5] = Integer.toString(49);

int gewinn;
gewinn = 0;

for (int i = 0; i < 6; i++) {
  for (int ao = 0; i < 6; i++) {
    if (LottoZahlen[i].equals(SpielerZahlen[ao])) {
      gewinn++;
    }
  }
}

// das ist dann halt die Ausgabe...
switch (gewinn) {
  case 1:
    System.out.println("1er:  Der 5te Schein hat einen Lotto 1er erreicht...");
    break;
  case 2:
    System.out.println("2er:  Der 5te Schein hat es fast in den Gewinnpot geschafft!");
    break;
  case 3:
    System.out.println("$$$  GLÜCKWUNSCH! Der 5te Schein hat einen Lotto 3er erzielt!");
    break;
  case 4:
    System.out.println("$$$$  SUPER! Der 5te Schein hat einen Lotto 4er erzielt!");
    break;
  case 5:
    System.out.println("$$$$$ WIIILD! Der 5te Schein hat einen Lotto 5er erzielt!");
    break;
  case 6:
    System.out.println("$$$$$$ JACKPOT!!! Der 5te Schein hat einen Lotto 6er erzielt!");
    break;
  default:
    System.out.println("Leider Niete... Der 5te Schein hat keinen Gewinn erzielt!");
    break;
}

Es sollte eigentlich in der Konsole ausgegeben werden, dass ich einen Lotto-5er gewonnen habe aber es kommt nur ein Einer heraus.

Kann mir jemand helfen, eine Möglichkeit zu finden, alle Stellen des ersten Arrays mit allen Stellen des zweiten Arrays zu vergleichen?

Bild zum Beitrag
Computer, programmieren, Java, Array, Spiele und Gaming
Array-Liste alphabetisch sortieren in BlueJ?

Ich möchte eine Array-Liste mit CDs, die mit Titel, Autor und Erscheinungsjahr gespeichert werden, alphabetisch (nach Titel) sortieren (das Programm soll unabhängig vom Inhalt ablaufen. Es soll also nicht ein gespeicherter Titel im Programm benutz werden). In der if-Anweisung wird mir beim > eine Fehlermeldung angezeigt, was ja sinnvoll ist, da ein String ja nicht > als ein andere sein kann. Ich weiß allerdings nicht, was ich stattdessen schreiben soll.

Vielen Dank schonmal im Voraus.

public void sortiernNachTitel()

   {

       cd temp;

       for(int i=1; i<cdanzahl; i++)

       {

           for(int j=0; j<cdanzahl-i; j++)

           {

               if(cdSammlung[j].gibTitel()>cdSammlung[j+1].gibTitel())

               {

                   temp=cdSammlung[j];

                   cdSammlung[j]=cdSammlung[j+1];

                   cdSammlung[j+1]=temp;

               }

           }

       }

       for( int a=0; a<cdanzahl; a++)

       {

           System.out.println(cdSammlung[a].gibTitel());

           System.out.println(cdSammlung[a].gibInterpret());

           System.out.println(cdSammlung[a].gibErscheinungsjahr());

       }

   }

Computer, Schule, programmieren, Java, Array, BlueJ, Informatik
C# 2D Array erste Zeile entfernen?

Guten Tag ich bin zurzeit an einem Projekt und die erste zeile soll aus dem Array gelöscht werden.

das ist meine Ausgabe und die erste zeile soll komplett gelöscht werden.

und das ist ein teil meines Codes:

for (int i = 0; i < sArrEinkauf.GetLength(0)-1; i++)
            {
                if (sArrEinkauf[i, 0] == sArrEinkauf[i + 1, 0]) 
                {
                    int summe = 0;
                    int temp = 0;
                    int temp2 = 0;

                    temp = Convert.ToInt32(sArrEinkauf[i, 4]);                     temp2 = Convert.ToInt32(sArrEinkauf[i + 1, 4]);                     summe = temp + temp2;                     sArrEinkauf[i + 1, 4] = summe.ToString();                     sArrEinkauf[i, 0] = "X";                 }

            }             string[,] tmparray = new string[0,0];             string[] temparray = new string[5];             for (int i = 0; i < sArrEinkauf.GetLength(0); i++)             {                 Console.WriteLine("\n");                 for (int j = 0; j < sArrEinkauf.GetLength(1); j++)                 {                                          sArrEinkauf[i, 0] = "A" + sArrEinkauf[i, 0];

                    Console.Write(sArrEinkauf[i, j] + "\t");
                }
            }

Bild zum Beitrag
Computer, Schule, programmieren, Array, C Sharp, Informatik
Pivotwahl bei Quicksort und Quickselect?

Guten Abend,

ich bräuchte mal kurz Hilfe bei folgenden Aufgaben, bitte. Es geht mir darum, dass ich einfach nicht versteh', was zu tun ist. Wir hatten in der Vorlesung den Quicksort-Algorithmus. Ich weiß, dass bei Quicksort das zu sortierende Array in immer kleiner Teilarrays eingeteilt wird, wobei das größere Array zuerst auf den Stack gelegt wird. Das Pivotelement ist entweder das linke oder das rechte und man setzt dann links und rechts einen Pointer am entsprechenden Teilarray. Ist das erste Element des zu sortierenden Teilarrays, welches größer als das Pivotelement ist, gefunden, und es findet sich vom rechten Pointer aus das erste Element, welches kleiner als das Pivotelement ist, so werden diese vertauscht. Bei Überkreuzungen tausche jenes Element auf dass der linke Pointer zeigt mit dem Pivotelement. So hatten wir's zumindest in der Vorlesung (Partitionswahl). Zu den Aufgaben

Aufgabe 1

Ein wichtiger Faktor für die Laufzeit von Quicksort und Quickselect (das Auswahlverfahren des k-kleinsten Elements analog zu Quicksort) ist die Wahl des Pivotelements. Das Pivotelement sollte die zu sortierende Folge in zwei möglichst gleich große Teilfolgen aufspalten.Gegeben sei eine unsortierte Folge mit n paarweise verschiedenen Elementen. Weiterhin sei r(x) die Position des Elements x in der sortierten Folge. Eine mögliche Strategie für die Pivotwahl ist:Wähle uniform zufällig 7 Elemente aus der Eingabefolge und gib das viertkleinste als Pivotelement aus. Dabei können Elemente in der Auswahl mehrmals vorkommen (Ziehen mit Zurücklegen)

.a) Berechne die Wahrscheinlichkeit für das Ereignis: n/4 < r(Pivot) ≤ 3n/4.

b) Nach wie vielen unabhängigen Wiederholungen der Pivotwahl ist zu erwarten, dass der Rang des Pivotelements das erste Mal außerhalb des Intervalls aus Aufgabenteil a) liegt? Hinweis: Du darfst annehmen, dass n= 4·kfür ein k∈N.

Aufgabe 2

Konstruiere eine Folge der Länge7, so dass Quickselect bei Verwendung der Pivotfunktionpivot(links, rechts) =⌈(links+rechts)/2⌉ auf der Suche nach dem viertgrößten Schlüssel die Problemgröße stets nur um 1verringert. Der Algorithmus soll insgesamt also sieben Schritte benötigen, bis er terminiert. Wende Quickselect auf Ihre Folge an, um die Korrektheit zu zeigen

Ansatz Ich verstehe hier nicht, wie n/4 gemeint ist. Wir hatten in der Vorlesung immer das Pivotelement ganz links oder ganz rechts. Jetzt steht hier "Pivot(links,rechts) = [(links+rechts)/2]. Greift man sich also da Element in der Mitte? Das ist bei einer Folge der Länge 7 doch nicht möglich, oder? WIe gehe ich allgemein vor um eine solche Folge zu finden.

LG

Jensek81

Computer, Schule, Mathematik, programmieren, rechnen, Array, Informatik, Theoretische Informatik, Algorithmus, stack, Binomialverteilung, Quicksort, Sortieralgorithmus, Algorithmen und Datenstrukturen

Meistgelesene Fragen zum Thema Array