javaのObject型配列について質問です。
現在、文字列と数値の両方を同じ配列に格納しようとしているのですが
うまくいきません。
Object[][] a = new Object[2][3];
for(int i = 0; i < 2; i++){
for(int j = 0; j <3; j++){
a[i][j] = new Object();
のようなかんじでいいのでしょうか?
<Q1>これだけだとa[i][j]に値をいれていませんよね?
<Q2>Objectはそのままで文字列と数値両方いれれるのでしょうか?
あるサイトでは
Student[][] a = new Student[2][3];
for(int i = 0; i < 2; i++){
for(int j = 0; j <3; j++){
a[i][j] = new Student();
class Student{
int num;
String name;
Student(int num,String name){
this.num=num;
this.name=name;
}
Studentクラスをつくり、Student型の配列を定義するとかいてありました。
<Q3>このStudentクラスではなにをしているのでしょうか?
<Q1>、<Q2>、<Q3>それぞれ回答よろしくお願いします。
No.3ベストアンサー
- 回答日時:
>double型をInteger等のラッパークラスに入れずとも、
>自動変換されるということでよろしいのでしょうか?
所謂 auto boxing というものです。キャストさえ不要です。
分かりにくくなるので、あまりお勧めしませんが・・・
>Studentクラス内にa[i][j]に入れたい詳しい数値、
>文字列を設定してあげればいいのでしょうか?
そうですね。細かなところを突っ込んでおくと、
まず、Stdudent のコンストラクタを書くと、デフォルトコンストラクタが
消えるので new Student() とは書けなくなります。
必要ならデフォルトコンストラクタを書いてください。こういうの
public Student () {
//
}
それと、クラスには普通は public を、フィールドには private を、
コンストラクタやメソッドには public を付けて宣言し
フィールドには必要に応じてpublicなアクセッサを付けるのが良いです。
本当に狭い範囲でしか使わないオブジェクトなら publicも privateも
アクセッサもなしでよいですが、いろいろなツールに大丈夫かと
注意されるでしょう(^^;
この辺はアクセス制御やカプセル化をゆっくり学んでゆけばわかります。
No.2
- 回答日時:
><Q1>これだけだとa[i][j]に値をいれていませんよね?
Object型のオブジェクトの参照を代入しています。
Object型は特に何も情報を持つ能力は持たないので、
代入しても特に意味はないです。
文法的には何も問題がありませんが、こういうコードを
見ることはないですね。
><Q2>Objectはそのままで文字列と数値両方いれれるのでしょうか?
「そのままで」が、「Object型のオブジェクトの参照を代入した
配列要素に何か代入する」という意味なら、
Object型の配列要素に何かを代入すれば、最初に
代入した Object型のオブジェクトの参照は上書きされて消えてしまいます。
つまり、Object型のオブジェクトの参照の代入は、徒労であったということです。
String型のオブジェクト(の参照)はそのままObject型の配列要素に代入できます。
int 型や double 型などのプリミティブ型は Integer型、Double型の
オブジェクト(参照型のインスタンス)に自動的に変換されて、
その参照が代入されます。
><Q3>このStudentクラスではなにをしているのでしょうか?
この場合、Student は数値と文字列を保持する参照型です。
「なにをしている」というのはどういう意味なんでしょう?
配列に何かデータを代入するなら、int型等のプリミティブ型を使うか
このStudent型のようなデータを保持できる型を使います。
そうするしか、データを保持する方法はありません。
配列は Object型のままで、それの配列要素に Student型のオブジェクトの
参照を代入することも可能ですが、間違いが起こりやすいので
推奨されていません。最初から配列要素に Student型のみを入れるのが
分かっているなら、配列は Student型で宣言し、Student型を代入して
使います。
詳しい回答ありがとうございます!
このObject型をつかうのであれば
double型をInteger等のラッパークラスに入れずとも、自動変換されるということでよろしいのでしょうか?
書き換えるのであれば下記のようにして、
Studentクラス内にa[i][j]に入れたい詳しい数値、文字列を設定してあげればいいのでしょうか?
Student[][] a = new Student[2][3];
for(int i = 0; i < 2; i++){
for(int j = 0; j <3; j++){
a[i][j] = new Student();
class Student{
int num;
String name;
Student(int num,String name){
this.num=num;
this.name=name;
}
質問ばかりで申し訳ないです
No.1
- 回答日時:
autoboxing があるからあんまり考えることはないような気がするんだけどなぁ.... 「うまくいきません」が, 具体的になに
がどう「うまくいかない」のかわからんのだけど.お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
テキストボックスの値を変数に...
-
整数xxxが大き過ぎますというエ...
-
jsp~jspにhiddenを使って変数...
-
[VBS]変数を定数に変換する方法...
-
C言語 アロー演算子について質...
-
DataTableの値を変数に代入したい
-
親ウィンドウの情報をインライ...
-
i++と++i ってどう違うのですか?
-
processing エラーで、 "cannot...
-
python の 連鎖代入の文法
-
無名関数のメリットがよくわか...
-
VB6.0での条件文にある#の意味
-
Variant型で宣言してるのにEmpt...
-
プログラミングで変数と関数の...
-
var aaa=bbb?cccl:ddd; の意味...
-
ASP+SQLにてSessionがNullになる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
テキストボックスの値を変数に...
-
Variant型で宣言してるのにEmpt...
-
[VBS]変数を定数に変換する方法...
-
python の 連鎖代入の文法
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
構造体からレコードセットへの代入
-
コマンドプロンプト バッチ|結...
-
stdpicture型の変数に、、
-
無名関数のメリットがよくわか...
-
i++と++i ってどう違うのですか?
-
DataTableの値を変数に代入したい
-
Accessコンボボックスにレコー...
-
VBA 1行で複数の代入を行った...
おすすめ情報