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
Serielle Kommunikation zwischen ESP32 und Raspberry Pi mit Java?

Hey liebes Forum,

Ich habe einen ESP32 der durchgehend mit einer Baud Rate von 115200 jede 500 Millisekunden eine Nachricht mit Serial.println("Test") schickt. (Das geht!)

Auf meinem Raspberry Pi läuft das Ubuntu Server Betriebssystem LTS und es ist Java JDK17 (LTS) installiert. Ich kann also ganz normal Java Programme hier laufen lassen.

Der ESP32 ist mit dem Raspberry Pi über die Serielle Schnittstelle verbunden also über GPIO14/GPIO15 und Ground. Nicht über USB sondern über RX/TX/Ground. (Ja ich habe RX TX Ground richtig angeschlossen: RX geht auf TX, TX geht auf RX), Beide Grounds von den 2 Geräten sind miteinander verbunden.

Jetzt würde ich gerne am Raspberry Pi ein Java Programm laufen lassen, dass durchgehend auf die Serielle Schnittstelle hört und diese "Test" Nachrichten, die vom ESP32 losgeschickt werden, empfängt. Die Test Nachrichten sollen also am Raspberry Pi ausgegeben werden bzw. im Java Programm gespeichert werden. Ich will nämlich in Zukunft nicht nur Test verschicken sondern richtige Daten und die dann am Raspberry Pi mit Java weiterverarbeiten.

Ich habe lange im Internet nach einer Lösung gesucht, aber nichts gefunden. Nur Lösungen mit Python scripts. Ich würde aber gerne Java verwenden. Ich bin auch schon auf pij4 gestoßen, das klappt aber auch nicht. Da gibts Library Error wie zum Beispiel: java.lang.UnsatisfiedLinkError: oder wrong ELF class: ELFCLASS32 (Possible cause: can't load ARM .so on a AARCH64 platform)

Welche Library eignet sich am besten bzw. muss ich noch was anderes am Raspberry Pi konfigurieren, damit das ganze geht.

Allgemein: Wie kann ich am Raspberry Pi mit Java, die Daten, die vom ESP32 weggeschickt wurden über die Serielle Schnittstelle empfangen?

Bild zum Beitrag
Computer, Technik, Elektronik, Java, Mikrocontroller, Arduino, Technologie, Serielle Schnittstelle, Raspberry Pi, ESP32
PQ-Formel mit Eclipse?

Hallo,

ich hab versucht eine PQ-Formel zu erstellen:

        static final double pqFormeln(double a, double p, double q, boolean art) 
        {
                try 
                {
                  p/=a; q/=a;
                } catch (ArithmeticException e) 
                {
                  p/=-2;
                }
                double r = sqrt(p*p-q);
                if (isNaN(r))
                        throw new ArithmeticException("Keine reele Zahl. Lösung des "+(art?'+':'-')+" x Bereiches nicht möglich.");
                return art?p+r:p-r;
        }
        
        private static boolean isNaN(double r)
        {
                
                return false;
        }

        private static double sqrt(double d) 
           {
                return 0;
        }


}

Allerdings kann ich kein Java run machen. Meine Aufgabe lautet:

Wir wollen ein Programm schreiben, das die Nullstellen von quadratischen Funktionen der Form f(x) = x 2 + px + q berechnet. Die aus der Mathematik bekannte pq-Formel liefert uns die Nullstellen: x1,2 = − p 2 ± r p 2 4 − q Wenn der Term unter der Wurzel negativ ist, hat die Funktion keine (reelle) Nullstelle; ist er gleich 0, so gibt es genau eine Nullstelle. Schreiben Sie ein Programm PQ , welches p und q als Parameter ubergeben bekommt, die ¨ Nullstellen berechnet und ausgibt; geben Sie dabei zuerst die kleinere Nullstelle aus. Geben Sie anschließend aus, wie viele Nullstellen es gibt (Ausgabe nach dem Schema ” Es gibt 2 Nullstellen.“). Falls nicht genau 2 Argumente beim Programmaufruf angegeben werden, soll eine beliebige Fehlermeldung ausgegeben werden, die mit ERROR beginnt. 

Kann mir jemand hier helfen?

Computer, Studium, Schule, Mathematik, Java, Informatik, pq-Formel
Java Chess programmieren?

Hallo,

ich soll ein Chess Programm schreiben, welches eine positive, ganze Zahl n als Argument von der Konsole übergeben bekommt und ein Schachbrett der Größe n × n auf der Standardausgabe ausgibt. Das Brett beginnt oben links mit einem schwarzen Feld. Wenn kein Argument angegeben wird oder die eingegebene Zahl negativ ist, soll das Programm eine Fehlermeldung ausgeben, welche mit ERROR beginnt. Ich schreibe das Programm mit Eclipse

Das hab ich bis jetzt:

  public static void main(String args[]) {

  

   int breite = 5;

  

  

   System.out.println("* * *");

   System.out.println(" * * ");

   System.out.println("* * *");

   System.out.println(" * * ");

   System.out.println("* * *");

  

   for(int anzahlSterne = 1; anzahlSterne <= breite; anzahlSterne++) {

   System.out.println(anzahlSterne);

   for(int sternnummer = 1; sternnummer <= anzahlSterne; sternnummer++) {

   System.out.print("* ");

   }

   System.out.println();

  

   {

  

   }

  

   }

   for(int anzahlSterne = breite -1; anzahlSterne <= 1; anzahlSterne++) {

   System.out.println(anzahlSterne);   

   for(int sternnummer = 1; sternnummer <= anzahlSterne; sternnummer++) {

   System.out.print("* ");

   }

   System.out.println();

   }

  }

   

}

Ich komme halt echt nicht weiter und ich sitze seit zwei Tagen an den Aufgaben. Kann mir vielleicht jemand helfen?

Mit freundlichen Grüßen

Computer, Studium, Schule, programmieren, Java, Informatik, Universität, Schachbrett, eclipse java
Java array rückwärts?
package uebung1;
import java.util.Random;
public class Felder {
public int[] fuellen(int o, int l) {
int zahlen[] = new int[l];
Random rnd = new Random();
for (int x = 0; x < zahlen.length; x++) {
zahlen[x] = rnd.nextInt(o + 1);
}
return zahlen;
}
public int[] fuellen(int u, int o, int l) {
int zahlen[] = new int[l];
Random rnd = new Random();
for (int x = 0; x < zahlen.length; x++) {
zahlen[x] = rnd.nextInt(o - u) + u;
}
return zahlen;
}
public void ausgeben(int zahlen[]) {
for (int x = 0; x < zahlen.length; x++) {
if (x == 0) {
System.out.print("[");
}
System.out.print(zahlen[x]);
if (x != zahlen.length - 1) {
System.out.print(", ");
}
if (x == zahlen.length - 1) {
System.out.println("]");
}
}
}
public void ausgebenrueckwaerts(int zahlen[]) {
for (int x = zahlen.length-1; x >= 0; x--) {
if (x == zahlen.length-1) {
System.out.print("[");
}
System.out.print(zahlen[x]);
if (x != 0) {
System.out.print(", ");
}
if (x == 0) {
System.out.println("]");
}
}
}
public void drei_fuenf(int zahlen[]) {
for (int x = 0; x < zahlen.length; x++) {
if (zahlen[x] % 3 == 0 && zahlen[x] % 5 == 0) {
System.out.println("Hello Zahl: " + zahlen[x]);
} else if (zahlen[x] % 3 == 0) {
System.out.println("Fizz Zahl: " + zahlen[x]);
} else if (zahlen[x] % 5 == 0) {
System.out.println("Buzz Zahl: " + zahlen[x]);
}
}
}
public boolean finde(int z, int zahlen[]) {
boolean found = false;
for (int x = 0; x < zahlen.length; x++) {
if (zahlen[x] == z) {
found = true;
break;
}
}
return found;
}
public int finde_pos(int z, int zahlen[]) {
int pos = -1;
for (int i = 0; z != zahlen[i]; i++) {
pos++;
}
pos++;
return pos;
}
public int finde_anz(int z, int zahlen[]) {
int anz = 0;
for (int i = 0; i < zahlen.length; i++) {
if (zahlen[i] == z) {
anz++;
}
}
return anz;
}
}
programmieren, Java

Meistgelesene Fragen zum Thema Java