2014-10-07 3 views
0

так каждый раз, когда я запустить программу и ввести 2-й выбор, он говорит мне rangecheck ошибку, index0, размер 0.Java 2D ArrayList

, что я понял из этого после исследования является то, что ArrayList пусто, как Я использую функцию add в 2D arraylist?

| ABCDEFGHIJKLMNOPQRSTUVWX

- + ------------------------

01 | gggggggggggggggggggggggg

02 | gGGGGGGGGGGGGGGGGGGGGGGg

03 | gGggggggggggggggggggggGg

04 | gGgYYYYYYYYYYYYYYYYYYgGg

05 | gGgYggggggggggggggggYgGg

06 | gGgYggggggggggggggggYgGg

07 | gGgYggYYYYYYYYYYYYggYgGg

08 | gGgYggYggggggggggYggYgGg

09 | gGgYYYYggggggggggYYYYgGg

10 | gGggggggggggggggggggggGg

11 | gGGGGGGGGGGGGGGGGGGGGGGg

12 | gggggggggggggggggggggggg

package map; 
import java.io.FileInputStream; 
import java.io.InputStream; 
import java.util.Scanner; 
import java.util.ArrayList; 

public class MapMain 
{ 
    public static void main(String [ ] args) 
    { 
     Scanner input = new Scanner(System.in); 
     InputStream is = null; 
      int i; 
      char c; 
      String T; 
      ArrayList<ArrayList<String>> Contain = new ArrayList<ArrayList<String>>(); 
      for(int L = 0; L < 30; L++) 
      { 
       Contain.add(new ArrayList<String>()); 
      } 

      try{ 
       do{ 
      int a=0; 
      String Elements; 
      System.out.print("To load map enter 1\nTo print loded map enter 2\nTo change specific elements press 3 "); 
      a=input.nextInt(); 
      switch (a){ 
      case 1 : 
       System.out.print("What is the file dest?"); 
       T=input.nextLine(); 
       is = new FileInputStream(T); 
       while((i=is.read())!=-1) 
       { 
        c=(char)i; 
        String O = "ankosh"; 
        //Contain.add(Contain.O); 
       } 
       break; 
      case 2: 
       while(true) 
       { 
        String U = Contain.get(16).get(0); 
        //System.out.print(Contain); 
        break; 
       } 
       break; 
      case 3: 
       System.out.print("What do you want to insert?"); 
       Elements=input.nextLine(); 
       //switch (Elements){ 
       //case 
       } 
       break; 
      } while(true); 
      }catch(Exception e){ 

     // if any I/O error occurs 
     e.printStackTrace(); 
    }finally{ 
    } 
    } 
} 
+0

Прежде всего, всегда используйте _camelCase_ для имени переменной – Baby

+0

вам нужно получить первый список и добавить на второй, как Contain.get (0) .add ("this String"); Почему вы используете список двойных массивов? Вы не можете использовать карту или что-то в этом роде? – StackFlowed

+0

@wrongAnswer вы могли бы предоставить пример или источник для карты? – Ankosh

ответ

1

Вы создали массив массивов и массивов, которые он содержит, до сих пор это нормально. Теперь на примере 2 вы пытаетесь достичь первого элемента 16-го массива (в основном типа String), который является нулевым, поскольку вы еще ничего не добавили к этому массиву. Что вам нужно сделать, прежде чем попробовать get (index), проверить, что длина массива больше индекса. Чтобы добавить в массив: content.get (16) .add (str) ;.

+0

Итак, я добавил элемент, и он сработал спасибо! был другой вопрос, я пытаюсь загрузить из файла в этот ArrayList, поэтому я хочу его в таблице, теперь его как массив внутри массива, а не массив [row] [col] table, можно ли это в таблице, так что если пользователь хочет, например, изменить Array [2] [2] на ввод «Y»? потому что многие люди сказали мне использовать HashMaps лучше @ user265732 – Ankosh

+0

Что вы подразумеваете под «возможно ли это иметь в таблице, чтобы пользователь мог, например, изменить Array [2] [2] на ввод "Y"?» – user265732

+0

хорошо, что в случае с коммутаторами один из них должен изменять определенные элементы в массиве в зависимости от строки и столбца, которые пользователь предоставляет. как я могу ссылаться на строку и col от пользователя к индексу в arraylist? – Ankosh