• ベストアンサー

ArrayListを使った多次元配列の作成について

ArrayListで可変長配列を扱っているのですが、 2次元可変長配列を用いる必要が出てきたので、 下記のように変更したのですがうまくいきません。 何が悪いのか教えていただけませんでしょうか? ----------------------------------------- ArrayList cars=new ArrayList(); cars.add("フェラーリ"); cars.add("ポルシェ"); cars.add("メルセデスベンツ"); for(int i=0;i<cars.size();i++){  String str=(String)cars.get(i);  System.out.println(str);} ----------------------------------------- 上記から下記のように変更しました。 ----------------------------------------- ArrayList[] cars=new ArrayList[3]; cars[0].add("フェラーリ"); cars[0].add("ポルシェ"); cars[0].add("メルセデスベンツ"); for(int i=0;i<cars[0].size();i++){  String str=(String)cars[0].get(i);  System.out.println(str);} ----------------------------------------- エラーは「Exception in thread "main" java.lang.NullPointerException」です。 どうやら初期配列が10ではなく3となってしまっているようです。

  • Java
  • 回答数3
  • ありがとう数24

質問者が選んだベストアンサー

  • ベストアンサー
  • tubumame
  • ベストアンサー率63% (7/11)
回答No.1

こんにちは。 >ArrayList[] cars=new ArrayList[3]; はArrayList型のオブジェクトのインスタンス を格納する箱を3個作成しただけなので、 この時点では、 cars[0] = null cars[1] = null cars[2] = null となっています。ですから、当然 cars[0].add("フェラーリ"); などとやると、NullPointerExceptionが 発生します。これをさけるには、 cars[0] = new ArrayList(); cars[1] = new ArrayList(); cars[2] = new ArrayList(); とする必要があります。

wanwanwanyoyoyo
質問者

お礼

返信が非常に遅れてしまい申し訳ありませんでした。 みなさんの回答、大変参考になりました。 さっそく書き直してみることにします。 argiさんの質問ですが、可変長配列×可変長配列を作ろうとしています。

その他の回答 (2)

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.3

ArrayListの配列は一個作れば充分でしょう。 下記を参考にしてください。 import java.util.*; class Cars { public static void main(String args[]){ ArrayList[] cars=new ArrayList[1]; cars[0]=new ArrayList(); cars[0].add("フェラーリ"); cars[0].add("ポルシェ"); cars[0].add("メルセデスベンツ"); for(int i=0;i<cars[0].size();i++){ String str=(String)cars[0].get(i); System.out.println(str); } } }

wanwanwanyoyoyo
質問者

お礼

回答ありがとうございます。 参考にさせていただきます。

  • argi
  • ベストアンサー率27% (5/18)
回答No.2

質問内容に質問ですが、 固定長配列×可変長配列 を作ろうとしていますか? 可変長配列×可変長配列 を作ろうとしていますか? 例外が発生している原因は#1の方の回答でOKだと思いますが、根本的にどちらなのでしょうか?

wanwanwanyoyoyo
質問者

お礼

回答の場所を間違えてました・・。 可変長配列×可変長配列を作ろうとしています。

関連するQ&A

  • ArrayListに多次元配列

    ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • ArrayList で配列を扱う場合の記述方法について

    ArrayList で配列を扱う場合の記述方法について、 探しきれないのでご教授お願いします。 ArrayList list = new ArrayList(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } という箇所をArrayList<Date>listを使って書き直すのはどのようになるでしょうか。 ArrayList<Date>list= new ArrayList<Date>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } とすると、 型 ArrayList<Date> のメソッド add(Date) は引数 (String) に適用できません。 というエラーになってしまいました。

    • ベストアンサー
    • Java
  • arraylist 二次元配列

    こんにちは 今アレイリストの二次元配列を学習しています DBからデータを取得で表示したいと思っています そこでfor文の拡張とつかうとうまくいうのですが 普通に記述するとうまくいきません 拡張FOR 文を使うのは初めてなので 何が違うかアドバイスお願いします コンパイルできません↓ if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (int k = 0 ; k <= hai.size(); k++) { %> <td width="60"> <% out.print(hai.get(i)); } %> コンパイルOK 表示できています <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (ArrayList list4 : hai) { %> <td width="60"> <% out.print(list4.get(i)); } %> <br> </tr> </table> <% 上のソースの エラーメッセージ 2013/04/16 9:24:12 org.apache.catalina.core.ApplicationDispatcher invoke 致命的: サーブレット jsp のServlet.service()が例外を投げました java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 よろしくお願いします

    • ベストアンサー
    • Java
  • CSVファイルを二次元配列に格納するプログラム

    整数のCSVファイルを読み込んで、int型の二次元配列に格納するプログラムを作成中なのですが どうもうまくいきません。 String Str = ""; try { File inFile = new File("./res/test.csv"); FileReader fr = new FileReader(inFile); BufferedReader br = new BufferedReader(fr); ArrayList<String[]> al = new ArrayList<String[]>(); while (br.ready()) { Str = br.readLine(); al.add(Str.split(",")); } int[][] im = new int[al.size()][]; for (int i = 0; i < al.size(); i++) { im[i] = (int)al.get(i); // ここでエラー } br.close(); fr.close(); } catch (Exception e) { System.out.println("ファイル読み込みに関するエラー"); } 他にいい方法ありませんか? また逆で、int型配列に格納されているデータをCSVファイルとして出力する方法もお願いします

  • ArrayListを使ったクラスの作成の仕方

    次のプログラム、どこが間違っているのでしょうか? コンパイルは通るのですが、実行しようとすると ずら~っとエラーが出てしまいます。 (例)at java.lang.ClassLoader.defineClass1(Native Method) at java.security.SecureClassLader.defineClass..... at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) ********************************************************** package siryou; import java.util.ArrayList; import java.io.*; class Info { private String name; private String age; private String nationality; public void setName(String nm) { name = nm; } public void setAge(String a) { age = a; } public void setNationality(String nt) { nationality = nt; } public void show(String j) { System.out.println("「名前=" + name + "」"); System.out.println("「年齢=" + age + "」"); System.out.println("「国籍=" + nationality + "」"); } } class Kojinjyoho02 { public static void main(String args[])throws IOException { System.out.println("何回入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); Info in = new Info(); ArrayList list = new ArrayList(); for(int i =0; i < res; i++){ System.out.println("名前は?"); str = br.readLine(); in.setName(str); System.out.println("年齢は?"); str = br.readLine(); in.setAge(str); System.out.println("国籍は?"); str = br.readLine(); in.setNationality(str); list.add(in); } for(int j=0; j < list.size(); j++){ String jyoho = (String)list.get(j); in.show(jyoho); } } }

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の比較方法

    JAVAでArrayListを使った多次元配列の要素を比較方法で困っています。 下記のコードで、アイテム、数量、金額をランダムに10個配列に追加しています。 private ArrayList<Item> list; public ArrayList<Item> getItems1() { return list; } public void setItems(ArrayList<Item> items) { getItems(); } public Inventory() { list = new ArrayList<Item>(); } public void getItems(){ for(int i =0; i<10; i++){ int theItemType = (int)(Math.random()*6+1); int theQut = (int)(Math.random()*20+1); int thePrice = (int)(Math.random()*40+101)/20; list.add(new Item(theItemType, theQut, thePrice)); } } public String getItemName() { if(itemType == 1){ return "シャツ"; } if(itemType == 2){ return "スカート"; } if(itemType == 3){ return "ズボン"; } if(itemType == 4){ return "ネクタイ"; } if(itemType == 5){ return "靴"; } if(itemType == 6){ return "靴下"; } return null; } public String toString() { return getItemName() + " , " + getQut() + " " + getPrice(); } 同じアイテム、金額の場合は、数量を合計して表示させたいです。例えば、配列の要素が下記のような場合、1つ目と2つ目の要素は同じアイテム、金額になるので、数量を20として表示させたいのですが、どのように比較していいのかわかりません。どなたか教えてください。よろしくお願いします。 靴下 , 4, 5 靴下 , 16, 5 ネクタイ , 3, 5 ネクタイ , 16, 6 ネクタイ , 2, 6 ズボン , 16, 6 ズボン , 15, 6 スカート , 3, 6 靴 , 17, 7 シャツ , 17, 7

    • ベストアンサー
    • Java
  • ArrayListによる計算表作成

    for文を使用し九九の計算結果を配列に格納し、その配列内の情報を表形式で表示してみる。※配列はArrayListを使用すること 上記の問題を解いています。 -------------------------------------------------------------- import java.util.ArrayList; public class m4_2 { public static void main(String args[]) { ArrayList list = new ArrayList(); String[]s = new String[9]; for(int i = 1; i<=s.length; i++){ for(int j =1; j<=s.length; j++){ list.add((i * j));     //ここがどのように記述するか?? } System.out.print(list.get(0)); System.out.print(list.get(1)); System.out.print(list.get(2)); System.out.print(list.get(3)); System.out.print(list.get(4)); System.out.print(list.get(5)); System.out.print(list.get(6)); System.out.print(list.get(7)); System.out.print(list.get(8)); System.out.print("\n"); } } } ---------------------------------------------------------- 実行結果イメージ 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 (以下省略) 私の書いたソースでは1の位しか計算してくれません。 今月から本格的にJavaを勉強し始めた初心者なので どうかよろしくお願いいたします。

    • ベストアンサー
    • Java
  • ArrayListを利用する問題

    問題 1.ArrayListのオブジェクトを生成する。 2.「何回入力しますか?」と出力し、標準入力をおこなう。 3.2で入力した回数分、以下の処理を繰り返す。 「n個目の値を入力してください」と出力し、標準入力を行う。(n=ループ回数) 入力された値をArrayListへ格納する。 4.ArrayListのサイズ分、以下の処理を繰り返す。 ArrayListより値を取得する。 取得した値を出力する。 結果 何回入力しますか? 3 1個目の値を入力してください。 hoge 2個目の値を入力してください。 poyo 3個目の値を入力してください。 hoo hoge poyo hoo 自分で書いたプログラム 1 import java.util.ArrayList; 2 import java.io.*; 3 4 class ArrayList2{ 5 public static void main(String[] args) throws IOException{ 6 7 ArrayList list = new ArrayList(); 8 list.add(n); 9 10 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 11 12 System.out.println("何回入力しますか?"); 13 14 String str = br.readLine(); 15 16 int num = Integer.parseInt(str); 17 18 for(int i = n ; i < num; i++){ 19 System.out.println("n個目の値を入力してください。"); 20 21 String str1 = br.readLine(); 22 23 } 24 } 25 } どうもうまくいきませんので教えて下さい。

  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • ArrayListクラスのインスタンスの宣言について

    まず初めに一言。 今自分が使用している本は3年ぐらいのモノです。 なので、宣言の仕方が変わっているかもしれません。 その上で質問です。 まず、ソースコードを貼り付けます。(JSP) <%@ page language="java" contentType="text/html; charset=Shift_JIS" import=java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>配列の挿入、削除(ArrayList)</title> </head> <body> <% //配列を定義する ArrayList array = new ArrayList(); //値をセットする array.add("1111"); array.add("2222"); array.add("3333"); //配列の値を表示する for (int i=0; i<array.size(); i++) { System.out.println("<p>" + (i+1) + "番目:" + array.get(i)); } //値を挿入する array.add(2, "9999"); //3番目の値を削除する array.remove(2); //変更後の配列の値を表示する for (int i=0; i<array.size(); i++) { out.println("変更後" + (i+1) + "番目:" + array.get(i)); } %> </body> </html> ArrayListクラスのインスタンスの宣言はどこか間違っているでしょうか。 Eclipse曰く、 『ArrayListはraw型です。ArrayListの参照はパラメータ化する必要があります。』 という警告が表示されます。 エラーでは無いみたいなのですが、やはり警告されている状態を放っておくのはあまり気持ちいいモノではありません。 そこで、質問です。 この警告を消す方法はあるのでしょうか。 もし、あるのでしたら教えて頂けると幸いです。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう