再会。我是一名初学者 Java 程序员,我正在制作一个类似于数组计算器的程序。问题是错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
at Main.input_matrix(Main.java:43)
at Main.main(Main.java:17)
我知道这意味着什么,问题是我无法理解它为什么会发生(方法:input_matrix())这是代码:
import java.util.Scanner;
public class Main {
public static int[][][] matrix_1 = new int[1][3][3];
public static int[][] AnswerArray = new int[3][2];
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
input_matrix();
System.out.println("Multiply matrix");
draw_3Array();
Logic();
draw_Answer_Array();
System.out.println("--------------");
sort_in_row();
sort_in_column();
replace_elements_rows_and_columns();
System.out.println("Answer after sort");
System.out.println("--------------");
draw_Answer_Array();
long endTime = System.currentTimeMillis();
System.out.println("Total execution time: " + (endTime - startTime) + "ms");
}
public static int[] input_matrix() {
Scanner count_of_rows = new Scanner(System.in);
Scanner count_of_columns = new Scanner(System.in);
Scanner count_of_elements_in_row = new Scanner(System.in);
int i = count_of_rows.nextInt();
int j = count_of_columns.nextInt();
int k = count_of_elements_in_row.nextInt();
int[][][] matrix_1 = new int[i][j][k];
System.out.println(matrix_1[i][j][k]);
return null;
}
public static void draw_3Array() {
for (int i = 0; i < matrix_1.length; i++) {
for (int j = 0; j < matrix_1[i].length; j++) {
for (int k = 0; k < matrix_1[i][j].length; k++) {
if (j == 0 && k == 0 || j == 1 && k == 0 || j == 2 && k == 0) {
System.out.print("|");
}
System.out.print(matrix_1[i][j][k] + " ");
if (k == 2 || i == 1 && k == 1) {
System.out.println("|");
}
}
}
}
}
public static void draw_Answer_Array() {
for (int i = 0; i < AnswerArray.length; i++) {
for (int j = 0; j < AnswerArray[i].length; j++) {
if (i == 0 && j == 0 || i == 1 && j == 0 || i == 2 && j == 0) {
System.out.print("|");
}
System.out.print(AnswerArray[i][j] + " ");
if (i == 0 && j == 1 || i == 1 && j == 1 || i == 2 && j == 1) {
System.out.println("|");
}
}
}
}
public static void Logic() {
//Перемножение
System.out.println("Answer");
}
public static void sort_in_row() {
//Sort by choosing
boolean isSorted_row = false;
int buf;
while (!isSorted_row) {
isSorted_row = true;
for (int i = 0; i < AnswerArray.length; i++) {
for (int j = 0; j < AnswerArray[i].length - 1; j++) {
if (AnswerArray[i][j] >= AnswerArray[i][j + 1]) {
isSorted_row = false;
buf = AnswerArray[i][j];
AnswerArray[i][j] = AnswerArray[i][j + 1];
AnswerArray[i][j + 1] = buf;
//System.out.println("|" + AnswerArray[i][j] + "|" + AnswerArray[i][j+1] + "|");
}
}
}
}
}
public static void sort_in_column() {
boolean isSorted_column = false;
int buf;
while (!isSorted_column) {
isSorted_column = true;
for (int i = 0; i < AnswerArray.length - 1; i++) {
for (int j = 0; j < AnswerArray[i].length; j++) {
if (AnswerArray[i][j] > AnswerArray[i + 1][j]) {
isSorted_column = false;
buf = AnswerArray[i][j];
AnswerArray[i][j] = AnswerArray[i + 1][j];
AnswerArray[i + 1][j] = buf;
//System.out.println("|" + AnswerArray[i][j] + "|" + AnswerArray[i][j+1] + "|");
}
}
}
}
}
public static void replace_elements_rows_and_columns() {
int help_variable_1 = 0;
for (int i = 0; i < AnswerArray.length - 1; i++) {
for (int j = 0; j < AnswerArray[i].length - 1; j++) {
if (AnswerArray[i][j + 1] > AnswerArray[i + 1][j]) {
help_variable_1 = AnswerArray[i + 1][j];
AnswerArray[i + 1][j] = AnswerArray[i][j + 1];
AnswerArray[i][j + 1] = help_variable_1;
}
}
}
}
}
提前感谢您的回复。祝大家拥有美好的一天。
您正在尝试访问不存在的数组元素。
由于代码中的变量 i 是数组中元素的数量,因此最后一个元素将具有索引 i-1,而不是 i,因为数组元素编号从零开始。对于 j 和 k 也是如此。
在您的情况下,要显示数组的最后一个元素,您应该使用下面的代码。
如果要绘制整个矩阵,请使用自己的draw_3Array()方法