Ошибка транспонирования Java

Я пытался создать программу 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]);
            }
        }
    }
}
  • Обновлено: Моя ошибка во время выполнения (решено)
  • Обновлено еще раз: Решено
  • РЕДАКТИРОВАТЬ 3: Цикл бесконечен ... он продолжает запрашивать значения от пользователя, даже когда я написал i <9 и j <9 ... он все еще продолжает запрашивать значения до бесконечности ..

Вы можете опубликовать ошибку?

user7 15.05.2018 18:45

Индексы массива начинаются с 0. for (i = 0; i < 9; i++)

user7 15.05.2018 18:46

Также вам не хватает скобки во внутреннем цикле for

GBlodgett 15.05.2018 18:46

Что за ошибка? Ошибка компиляции или ошибка времени выполнения. Пожалуйста, опубликуйте полное сообщение об ошибке, включая трассировку стека для ошибки времени выполнения.

vanje 15.05.2018 18:49

Добро пожаловать в Stack Overflow! Для обеспечения вашего успеха на этом сайте, пожалуйста, прочтите и примените информацию на страницах тур и Как спросить.

4castle 15.05.2018 18:56

Возможный дубликат Какой самый простой способ распечатать массив Java?

4castle 15.05.2018 19:01

Посмотрите на вывод, ребята .. Я добавил картинку вывода в самом вопросе.

Smit Shah 15.05.2018 19:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
150
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы определяете свою матрицу как 9x9

    int myArray1[][] = new int[9][9];

Но на самом деле вы хотите вставить 10x10 элементов:

 for (i = 0; i <= 9; i++)
    {
        for (j = 0; j <= 9; j++)

Так что либо:

  1. Переопределите свои массивы для хранения 10x10 элементов

    int myArray1 [] [] = новый int [10] [10];

  2. Читайте и сохраняйте только элементы 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

Smit Shah 15.05.2018 18:55

Вы печатаете myArray2, который представляет собой массив указателей / ссылок. Вы должны читать из массива при записи в него: System.out.print("Your array is as follow" + myArray2[i][j]);

Mạnh Quyết Nguyễn 15.05.2018 18:57

Вы не закрыли свой первый внешний цикл 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 <9 и j <9 ... он продолжает запрашивать значения до бесконечности ...» Имеется 81 запись для случая 9 на 9 и вы не указали, какой индекс 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

Smit Shah 16.05.2018 03:45

Другие вопросы по теме