When i run my code i get this error: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: How do I fix this? this is my code so far:

import java.awt.Font;

import javax.swing.*;

public class Program7

```
public static void showOutput(String output) {
JTextArea jta = new JTextArea(output);
jta.setFont(new Font("Consolas", Font.PLAIN, 60));
JOptionPane.showMessageDialog(null, jta);
}
public static int getHighest(int x[]) {
int hi = x[0];
for (int i = 1; i < x.length; i++) {
if (x[i] > hi) {
hi = x[i];
}
}
return hi;
}
public static int getLowest(int x[]) {
int low = x[0];
for (int i = 1; i < x.length; i++) {
if (x[i] < low) {
low = x[i];
}
}
return low;
}
public static int[] getGrades(String input) {
String data[] = input.trim().split("\\s+");
int x[] = new int[data.length / 2];
for (int i = 1; i < data.length; i += 2) {
if (data[i].matches("\\d+")) {
x[i / 2] = Integer.parseInt(data[i]);
} else {
System.err.println("inpiy error");
}
}
return x;
}
public static int[] sortSelection(int x[]) {
for (int i = 0; i < x.length - 1; i++) {
int largest = i;
for (int j = largest + 1; j < x.length; j++) {
if (x[j] > x[largest]) {
largest = j;
}
}
int tmp = x[largest];
x[largest] = x[i];
x[i] = tmp;
}
return x;
}
public static int[] sortBubble(int x[]) {
for (int i = 0; i < x.length - 1; i++) {
for (int j = 0; j < x.length - 1; j++) {
if (x[j + 1] > x[j]) {
int tmp = x[j + 1];
x[j + 1] = x[j];
x[j] = tmp;
}
}
}
return x;
}
public static int[] getData(String input) {
String data[] = input.trim().split("\\s+");
int x[] = new int[data.length];
for (int i = 0; i < data.length; i++) {
try {
x[i] = Integer.parseInt(data[i]);
} catch (NumberFormatException nfe) {
System.err.println(nfe.getMessage());
x[i] = 0;
}
}
return x;
}
public static float getAverage(int x[]) {
float total = 0;
for (int i = 0; i < x.length; i++) {
total += x[i];
}
return total / x.length;
}
public static String putArray(String names[], int x[]) {
String result = "";
for (int i = 0; i < x.length; i++) {
result += names[i] + "\t" + x[i] + "\n";
System.out.println(x);
}
return result;
}
public static int[] sortToHigh(int x[]) {
for (int i = 0; i < x.length - 1; i++) {
int largest = i;
for (int j = largest + 1; j < x.length; j++) {
if (x[j] > x[largest]) {
largest = j;
}
}
int tmp = x[largest];
x[largest] = x[i];
x[i] = tmp;
}
return x;
}
public static int[] sortBubbleByGrade(String names[], int x[]) {
for (int i = 0; i < x.length; i++)
for (int j = 0; j < x.length; j++)
if (x[j + 1] > x[j]) {
int tmp = x[j + 1];
x[j + 1] = x[j];
x[j] = tmp;
String tmpname = names[j];
names[j] = names[j + 1];
names[j + 1] = tmpname;
}
return x;
}
public static int[] sortToLow(int x[]) {
for (int i = 0; i < x.length - 1; i++) {
int smallest = i;
for (int j = smallest + 1; j < x.length; j++) {
if (x[j] < x[smallest]) {
smallest = j;
}
}
int tmp = x[smallest];
x[smallest] = x[i];
x[i] = tmp;
}
return x;
}
public static String[] getNames(String input) {
String data[] = input.trim().split("\\s+");
String x[] = new String[data.length / 2];
for (int i = 0; i < data.length; i += 2) {
x[i / 2] = data[i];
}
return x;
}
public static int[] sortByName(String names[], int x[]) {
for (int i = 0; i < x.length - 1; i++) {
for (int j = 0; j < x.length - 1; j++) {
if (names[j + 1].compareTo(names[j]) < 0) {
int tmp = x[j + 1];
x[j + 1] = x[j];
x[j] = tmp;
String tmpname = names[j];
names[j] = names[j + 1];
names[j + 1] = tmpname;
}
}
}
return x;
}
public static void main(String[] args) {
String input = JOptionPane.showInputDialog("Enter 1 or more names and grades");
String names[] = getNames(input);
int grades[] = getGrades(input);
sortBubbleByGrade(names, grades);
String output = "Name \t Grades \n" + putArray(names, sortToHigh(grades));
sortByName(names, grades);
showOutput(output + "\nsorted\n" + putArray(names, grades) + String.format("\nAverage:%3.2\n"
+ "Highest:%d\n" + "Lowest:%d\n", getAverage(grades), getHighest(grades), getLowest(grades)));
}
```