2015-11-22 3 views
0

Я довольно новичок в Java. Я пытаюсь добавить имя в конец этого многомерного массива.Многомерный массив строк, выброшенный за пределы

String[][] cartoons = new String [][] { 
    { "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" }, 
    { "Rubbles", "Barney", "Betty", "Bam Bam" }, 
    { "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" }, 
    { "Scooby Doo Gang", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" } }; 


    cartoons[0][5] = "VELMA"; 

    System.out.println(cartoons[0][5]); 

Как вы можете видеть, это выбрасывается за пределы.

run: 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 
    at javaapplication2.JavaApplication2.main(JavaApplication2.java:46) 
Java Result: 1 

Что я здесь делаю неправильно?

+1

Есть только 5 значений в 'мультики [0]', и Java массивы не изменяемые. –

+0

Что вы посоветуете исправить, или вместо этого использовать? Мне нравится простота вызывающего стиля. – woahguy

ответ

2

У вас есть 5 элементов в cartoons[0], что означает, что индекс доступа от cartoons[0][0] к cartoons[0][4]

и здесь

мультфильмы [0] [5] = "VELMA";

вы хотите получить доступ к 6-индекс, который на самом деле вне границ

, поэтому вы получаете

Исключение в потоке «основного» java.lang.ArrayIndexOutOfBoundsException: 5 в javaapplication2. JavaApplication2.main (JavaApplication2.java:46)

+0

Да, я пытаюсь добавить этот элемент в список. – woahguy

+0

вы объявляете и определяете массив одновременно, а в массиве java не изменяете размер, поэтому вы не можете добавить больше элементов в один и тот же массив. Вместо этого вы можете использовать Vector или ArrayList, оба могут быть изменены. – Prem

0

В Java массив не изменяемый, но вы можете использовать список:

List<List<String>> parentList = new ArrayList<>(); 
    // initialize the parent list 
    for (String[] strs : cartoons) { 
     ArrayList<String> subList = new ArrayList<>(); 
     subList.addAll(Arrays.asList(strs)); // initialize the sub list 
     parentList.add(subList); 
    } 

    parentList.get(0).add("VELMA"); // add the element 

    System.out.println(parentList.get(0).get(5)); 
0

Вы не можете добавить в массив в Java (потому что они не являются динамически размера), но вы можете использовать Arrays.copyOf(T[], int), которые (согласно Javadoc) Копии указанного массива, усечение или отступов с нулям (если необходимо), поэтому копия имеет указанную длину. Так как вы хотите добавить еще один элемент, который может выглядеть как

cartoons[0] = Arrays.copyOf(cartoons[0], cartoons[0].length + 1); 
cartoons[0][5] = "VELMA"; 
Смежные вопросы