Я пытался создать программу 2D-массива, чтобы продемонстрировать ТРАНСПОРТ, но получаю сообщение об ошибке ... вот мой код.
import java.util.Scanner;
/* To demonstrate TRANSPOSE USING 2-D array */
public class Array_2ddd {
public static void main(String args[]) {
Scanner s1 = new Scanner(System.in);
int i, j;
int myArray1[][] = new int[9][9];
int myArray2[][] = new int[9][9];
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
System.out.println("Enter array from 1 to 9");
myArray1[i][j] = s1.nextInt();
System.out.print("your array is" + myArray2[i][j]);
}
}
// Transposing now...
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
myArray2[i][j] = myArray1[j][i];
}
}
// After transposing
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
System.out.print("Your array is as follow" + myArray2[i][j]);
}
}
}
}
Индексы массива начинаются с 0. for (i = 0; i < 9; i++)
Также вам не хватает скобки во внутреннем цикле for
Что за ошибка? Ошибка компиляции или ошибка времени выполнения. Пожалуйста, опубликуйте полное сообщение об ошибке, включая трассировку стека для ошибки времени выполнения.
Возможный дубликат Что вызывает исключение java.lang.ArrayIndexOutOfBoundsException и как его предотвратить?
Добро пожаловать в Stack Overflow! Для обеспечения вашего успеха на этом сайте, пожалуйста, прочтите и примените информацию на страницах тур и Как спросить.
Возможный дубликат Какой самый простой способ распечатать массив Java?
Посмотрите на вывод, ребята .. Я добавил картинку вывода в самом вопросе.




Вы определяете свою матрицу как 9x9
int myArray1[][] = new int[9][9];
Но на самом деле вы хотите вставить 10x10 элементов:
for (i = 0; i <= 9; i++)
{
for (j = 0; j <= 9; j++)
Так что либо:
Переопределите свои массивы для хранения 10x10 элементов
int myArray1 [] [] = новый int [10] [10];
Читайте и сохраняйте только элементы 9x9 в заданном вами массиве
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++)
Привет, спасибо за ответ ... теперь я после внесения изменений получил странный результат. Ваш массив выглядит следующим образом [[I @ 6ea12c19Ваш массив выглядит следующим образом [[I @ 6ea12c19Ваш массив следующий [[I @ 6ea12c19 ......... Ваш массив следующий [[I @ 6ea12c19] Ваш массив выглядит следующим образом follow [[I @ 6ea12c1 Процесс завершен с кодом выхода 0
Вы печатаете myArray2, который представляет собой массив указателей / ссылок. Вы должны читать из массива при записи в него: System.out.print("Your array is as follow" + myArray2[i][j]);
Вы не закрыли свой первый внешний цикл for, то есть в строке 17, и не изменили размер массива на 10, так как вы хотели ввести 10 значений (от 0 до 9 = 10 значений).
В вашем коде есть несколько ошибок, также рекомендуется, чтобы размеры массива были объявлены как окончательные int, чтобы ваш код работал для всех размеров матриц и упростил отладку. В исходном коде есть следующие ошибки:
myArray[2]перед, который вы выполняете транспонирование. Это означает, что вы получаете your array is0.System.out.print("Your array is as follow" + myArray2[i][j]); и что вы забыли добавить новую строку после каждой строки (когда внутренний цикл завершен).i,j применить. Вы, вероятно, ошиблись бесконечным циклом с длинным, но завершающимся циклом.Ваш шаг транспонирования хорош.
Вот усовершенствованная версия вашего кода, которая позволяет вам вводить массив (в порядке чтения или, говоря более технически, в порядке старших строк), создавать транспонированный массив. Вы можете скопировать и сравнить текущий код с этим кодом напрямую, чтобы протестировать его.
public static void main(String args[]) {
final int m = 9; // Rows
final int n = 9; // Columns
Scanner s1 = new Scanner(System.in);
int i, j;
int myArray1[][] = new int[m][n]; // Original array, m rows n cols
int myArray2[][] = new int[n][m]; // Transposed array, n rows m cols
// Input
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
// Should be only prompt.
// Improved to show which entry will be affected.
System.out.printf("[%d][%d]" + "Enter array from 1 to 9\n", i, j);
myArray1[i][j] = s1.nextInt();
}
}
// Transposing now (watch for the ordering of m, n in loops)...
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
myArray2[i][j] = myArray1[j][i];
}
}
// After transposing, output
System.out.print("Your array is:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
System.out.print(myArray1[i][j] + " ");
}
System.out.println(); // New line after row is finished
}
System.out.print("Your transposed array is:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
System.out.print(myArray2[i][j] + " ");
}
System.out.println();
}
s1.close();
}
Для массива с тремя строками (m = 3) и четырьмя столбцами (n = 4) я ввел числа от 0 до 9, а затем 0, 1, 2. Как и ожидалось, результат должен быть:
Your array is:
0 1 2 3
4 5 6 7
8 9 0 1
Your transposed array is:
0 4 8
1 5 9
2 6 0
3 7 1
Спасибо, сэр .. Я новичок в программировании, так что ошибки новичка хе-хе ..: D
Вы можете опубликовать ошибку?