Индекс двумерного массива за пределами границ; создание нового 2d массива того же размера, что и параметр?

1

Я получаю сообщение об ошибке в этой строке кода

arraySum [i][j] = array1 [i][j] + array2 [i][j];

и при вызове класса метода

int [][]sum = doTheMath(array1,array2, '+');

Моя проблема может заключаться в создании нового двойного массива с той же длиной, что и в параметре. Для строк я использую :6 а для столбцов я использую :4.

 public static int [][]doTheMath(int [][]array1, int [][]array2, char arithmetic)
{
    // Declares 2-dimensional array the same size as one in parameters
    int [][]arraySum = new int [array1.length][array1[0].length];

    for (int i = 0; i < arraySum.length; i++)
        arraySum[i] = new int [array1[i].length];

    // For loop to take each row and column to separately do arithmetic on
    for (int i = 0; i < arraySum.length; i++) {
        for (int j = 0; j < arraySum.length; j++) {
            if (arithmetic == '+') 
                arraySum [i][j] = array1 [i][j] + array2 [i][j];
            else if (arithmetic == '-') 
                arraySum [i][j] = array1 [i][j] - array2 [i][j]; 
            else if (arithmetic == '*') 
                arraySum [i][j] = array1 [i][j] * array2 [i][j];
            else if (arithmetic == '/') 
                arraySum [i][j] = array1 [i][j] / array2 [i][j];
            else if (arithmetic == '%')
                arraySum [i][j] = array1 [i][j] % array2 [i][j];
        }
    }

    // arraySum value is returned
    return arraySum;
}

Значения массива 1 и массива 2 взяты из этого класса методов.

public static int getSize(String args)
{
    // Scanner for keyboard input
    Scanner keyboard = new Scanner(System.in);

    // Declares input as integer
    int input = 0;

    // Will print rows or columns and take keyboard input
    System.out.print(args);
    input = keyboard.nextInt();

    // While loop to check if input is in between 2 and 6, if not will print error
    while (input < 2 || input > 6) {
        System.out.print(args);
        input = keyboard.nextInt();
        if (input < 2 || input > 6)
            System.out.println("The number your entered was not between 2 and 6.");
    }

    // Input value is returned
    return input;
}
Теги:
arrays
methods
bluej

1 ответ

2
Лучший ответ

Эта часть вашего кода бесполезна

for (int i = 0; i < arraySum.length; i++)
    arraySum[i] = new int [array1[i].length];

как эта строка

int [][]arraySum = new int [array1.length][array1[0].length];

уже задает длину массива1.

Что касается вашего исключения, я считаю, вы хотите изменить эту строку

for (int j = 0; j < arraySum.length; j++)

в

for (int j = 0; j < arraySum[i].length; j++)
  • 0
    Большое спасибо! это исправило мою ошибку.
  • 0
    @KrakenJaws Не за что.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню