- ベストアンサー
Java NullPointerException
簡単な配列を作っているのですが、現在のコードについてどうしても以下のエラーが解決できません。 java.lang.NullPointerException 今作っているコードは ArrayList<Integer> intList = new intList<Integer>(); intList.add(1); といういうようなシンプルなものです。 ArrayList<Integer>ではなく、int[]にしてもダメでした。(正直この2つの違いもよく分かっていません。) 解決方法(+よろしければ違いの説明も)を教えて頂ければと思います。 宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
それぞれの回答欄にいろいろ補足されていますが、それでも要領を得ません。 困っている問題が再現するコンパクトなプログラムの全文を掲載したほうが ~~~~~~~~~~~~~~~~~~~~~~~~~~ 有用な回答を得られる可能性が高まるでしょう。 そしてひょっとしたら、そのコンパクトなプログラムを書いているうちに ご自身で問題に気が付くかもしれません。
その他の回答 (4)
- wormhole
- ベストアンサー率28% (1626/5665)
>ArrayList<Integer> newList = new ArrayList<Integer>() >newList = objABC.getList(); >newList.add(1); 上記の最後でNullPointerExceptionがスローされるというのであれば objABC.getList() がnullを返してるんでしょう(それでnewListを上書きしてるので最初のnew ArrayList<Integer>()は意味なし)。 objABC.getList()が何を返してるか確認してみてください。
お礼
ありがとうございます。確かにobjABC.getList()がnullを返していました!
- teketon
- ベストアンサー率65% (141/215)
>違いにつきましてはint型配列とInteger型を入れるArrayList型のオブジェクト変数ということですか? そう。 >それでは、int型配列はオブジェクト変数ではないということですか? そう。で、これがJavaでは微妙で、配列はオブジェクトなので、オブジェクト変数と呼んでもいいです。 呼ばなくてもいいです。 >また、dについてのコードはこれもコンストラクタと言うことができるのですか?(右辺の始めにnewをつけるのがコンストラクタの書き方と勉強したものですから。) 前段のJavaの配列はオブジェクトなので、内部的にはコンストラクタが起動しています。 ただし、経験上配列に対してコストラクタが呼ばれたなんて言い方はしません。 初期化と呼んでいます。
お礼
おお、そうですか。詳しい解説をありがとうございます!! ところで、プログラムでタイポ部分を修正しても上手くいきません。 と、、思っていたら別の箇所に問題がありました。 この場合、内容が別のものになるので投稿し直した方がよろしいのでしょうか? 長くないのでこの場をお借りするなら、 オブジェクトを別に作成していて public ObjABC(double X, double Y, int[] intList) { //... } public ArrayList<Integer> getList(){ return intList; } のある上で、 ArrayList<Integer> newList = new ArrayList<Integer>() newList = objABC.getList(); newList.add(1); と書いて、ここで最後の行でエラーが起きてしまったのです。 宜しくお願い致します。
- akubi_m
- ベストアンサー率22% (12/54)
>ArrayList<Integer> intList = new intList<Integer>(); そもそもこれはコンパイルが通らないのでは? ArrayList<Integer> intList = new ArrayList<Integer>(); でないとだめです。 これでコンパイルして実行したら問題ないかと思います。
補足
すみません。そこは単純にこの質問上でのタイポです。。 二段目の方でEclipse上ではエラーが出ませんが、実行させると上記のようなエラーが出てきます。
- teketon
- ベストアンサー率65% (141/215)
Integer型のデータを入れるArrayList型のオブジェクト変数a ArrayList<Integer> a = new ArrayList<Integer>(); 以下の変数b、c、dは同じ意味。 int型配列の変数b(要素は1と2と3) int[] b = new int[]{1,2,3}; int型配列の変数c(要素は1と2と3) int c[] = new int[]{1,2,3}; int型配列の変数d(要素は1と2と3) int[] d = {1,2,3}; これらを踏まえて、こうしたいのでは? ArrayList<Integer> intList = new ArrayList<Integer>(); intList.add(1);
補足
ええ、そうです。最後の通りにしたいのです。 違いにつきましてはint型配列とInteger型を入れるArrayList型のオブジェクト変数ということですか? それでは、int型配列はオブジェクト変数ではないということですか? また、dについてのコードはこれもコンストラクタと言うことができるのですか?(右辺の始めにnewをつけるのがコンストラクタの書き方と勉強したものですから。)
お礼
確かにご指摘ごもっともです。 全文は載せられないと思っていたら、コンパクトなコードで再現させてから載せるというふうにやるのですね! プログラミングというかこういったサイトについて初心者で、質問の仕方もよく分かっておりませんで失礼しました。 仰る通り、コンパクトなプログラムを書いている内にコード全体がシンプル化したため、どこがエラーの原因だったか気付くことが出来ました! ご指導頂きありがとうございました!