Ошибка компиляции обратной задачи массива Java - IndexOutOfBoundsException: 2 - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь перевернуть массив;Я ввел длину массива, чем все значения.После этого я пытаюсь изменить это следующим образом: a [i] = a [al - i] в «for construction» - for (int i = o; i Что такоея делаю не так там?Полный код:

package com.company;
        import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s1 = new Scanner(System.in);
        int al = s1.nextInt();
        int a[] = new int[al];
        for (int i = 0; i < al; i++) {
            a[i] = s1.nextInt();
        }
        for(int i = 0; i < al; i++) {
            a[i] = a[al - i];
        }
        for(int i = 0; i < al; i++) {
            System.out.println(a[i]);
        }
    }
}

1 Ответ

0 голосов
/ 25 сентября 2018

Описание проблемы вашей программы:

    for(int i = 0; i < al; i++) {
        //let al=5, so index of a will be 0..4
        //so for first iteration i=0
        //so a[5-0] i.e: a[5] where 5 is index out of bound
        a[i] = a[al - i];
    }

Решение проблемы, но эта логика не обратит данные вашего массива:

for(int i = 0,j=al-1; i < al; i++,j--) {
            a[i] = a[j];
}

Для обращения данных массива у вас естьиспользовать следующим образом:

 for (int i = 0, j = al - 1; i < j; i++, j--) {
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }

Итак, весь раствор,

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner s1 = new Scanner(System.in);
        int al = s1.nextInt();
        int a[] = new int[al];
        for (int i = 0; i < al; i++) {
            a[i] = s1.nextInt();
        }

        for (int i = 0, j = al - 1; i < j; i++, j--) {
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
        for (int i = 0; i < al; i++) {
            System.out.println(a[i]);
        }
    }
}
...