
class A {
private B b1;
private B b2[];
public A(B b){
if(b == null){
b1 = new B()
}
b1 = b;
}
public A(B[] ary){
if(ary == null || ary.length ! = 1){
b2 = new B(1)
}
b2 = ary;
}
}
class B{}
とあります。
AはBを参照し、多重度は1のものと、0又は1のものがあります。
NULLで判定しているのは、オブジェクトのデフォルト値でオブジェクトBの参照の代入をしているか判定しているのですか?
"ary.length ! = 1"は必ず必要なのでしょうか?
インスタンス化の時にコンストラクタの実行がされるみたいですが、配列の場合、ゴミでも入るのでしょうか?
インスタンス化する時以外でも、コンストラクタが実行されることがあるのですか?
多重度が「0又は1」と分かるように書かれているのでしょうか?
多重度が「0又は2」の場合はどう書きますか?
No.1ベストアンサー
- 回答日時:
まず、コンパイルできないわよね、これ。
コンパイルできるようにしてもif文意味ないし
何をやりたいのかさっぱりよ。
その時点でary.length ! = 1については何もいえないわ。
それはさておき、
> インスタンス化の時にコンストラクタの実行がされるみたいですが
されるわね。
> 配列の場合、ゴミでも入るのでしょうか
配列の場合ってpublic A(B[] ary)のこと?
ゴミがどこに入るといっているの?
> インスタンス化する時以外でも、コンストラクタが実行されることがあるのですか
ないわ。
何を聞きたいのかが良くわからないけど
コンストラクタで多重度を表現するなら
0 or 1
class A {
private B b1;
public A(){}
public A(B b){
b1 = b;
}
}
0 or 2
class A {
private B b1;
public A(){}
public A(B[] b){
if (b != null && b.length == 2) {
b1 = b;
}
}
}
でいいんじゃないかしら。
public A(){}は暗黙的に宣言されるので、別に書かなくてもいいけど。
この回答への補足
回答ありがとうございます。
public A(B[] b){ の部分では、
要素数が幾つの配列が引数なのか分からないので初期化するのに
if (b != null && b.length == 2) {
b.length == 2が必要なのですね。
1ファイルに同じクラス名のクラスは1つだけ書けるのですか?
if(ary == null || ary.length ! = 1){ の部分ですが、
public A(B b){ も、
public A(B[] ary){ も、
引数の数は1つで、参照型でしょうか?
オブジェクト型の変数のb1,b2には、どちらの引数で呼ばれても、値をセットしたのか…。
自分のが呼ばれたわけではなくても、引数の数が同じで、参照型で、実行はしてしまうので、多重度が0の場合は、配列の生成をしてから、値をセットしたのか…。
多重度0or1の、多重度0がb2[0]、多重度1がb2[1]でしょうか?
しかし多重度0はオブジェクトが無いということとは違うのでしょうか?
配列の初期化は、b1 = bという形で、できるのですか?
b2 = new B(1)なので、b2[1]ってありませんね。
ところで、要素数2の配列データを要素数1の配列にセットした場合、2番目のデータは切り捨てられるのでしょうか?
b2 = aryで考えると、インデックスを参照していないので、エラーにはなりませんか?

No.3
- 回答日時:
「多重度」じゃなくて配列型 B[]か、通常クラス型 B かってことじゃあないの?
基本用語をまず勉強し直す必要がありそう。
で、問題集を写したと言うが打ち間違いがあるようだ。それとも間違い探し問題なのか?
だったら、回答を教えてしまうことになるのかな?回答集は付いてないのか?
public A(B[] ary){
if(ary == null || ary.length ! = 1){
/* 渡された配列型変数aryの要素数が1ではないので、手持ち変数を別途初期化しようとしている. この意味も完全に誤解しているようだ。*/
× b2 = new B(1) → b2 = new B[1]; でなくては、B[] b2 の型と一致しない。丸括弧と角括弧では意味が違うことを解ってないから打ち間違うのだろう。ここでやってるのは、配列型の初期化であって、要素は何も入っていない。
b2[0] = new B();// b2の要素0番目にBクラスのインスタンスを代入
}else{
b2 = ary;
}
b2 = new B[1];の入力ミスでした。すいません。
「多重度」に関しては、解説がありました。
(1)多重度が1の関連
コンストラクタの引数にBクラスのオブジェクトを1つ取り、メンバ変数に代入します。
引数がnullの場合はBクラスのオブジェクトを生成し、メンバ変数に代入します。
(2)多重度が0もしくは1の関連
コンストラクタの引数にBクラスのオブジェクトを格納する配列を取り、メンバ変数に代入します。
引数の配列がnullまたは要素数が1以外の場合は、要素が1の配列を生成し、メンバ変数に代入します。
と書かれていました。
ありがとうございました。
No.2
- 回答日時:
非常に基本的なことを聞きたいんだけど, あなたのいう「多重度」って何?
そして, #1 でも書かれてるんだけどやっぱり何をしたいのかが分からない.
この回答への補足
多重度とは、ここでは、AクラスのオブジェクトがBクラスのオブジェクトを幾つ参照しているかという意味です。
問題集のコーディングをそのまま書いています。
訳の分からないコーディングですが、JAVAの文法が理解できているか、確認するためのものだと思います。
if(ary == null || ary.length ! = 1){ は、
まだ配列Bクラスを生成しない(領域確保をしていない)場合、
生成しないで配列を参照したりすると実行時エラーになるため、
判定して、生成しているのではないかと思います。
この"ary.length ! = 1"は領域確保されているか判定しているのかな~。
要素数は1でした。b2[0]しかないですね。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Java java final 1 2022/06/10 22:49
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
for文とStringBuffer
-
2次元の配列となっているクラ...
-
class Odd{
-
このPGの良い使い方を教えて下...
-
double型の配列について。
-
配列の頭に要素を挿入する方法
-
ResourceBundleのgetStringArra...
-
String[] とVectorの使い分け
-
初歩的な質問です(配列について)
-
コンストラクタと多重度
-
JavaのCalendarのMONTHはなぜ0...
-
変数名
-
逐次検索と平均比較回数
-
配列を引数にするとき
-
ランダム関数を使って
-
ArrayIndexOutOfBounds例外
-
javaAppletから、phpに配列を渡...
-
多次元配列への数値の代入。
-
どこがエラーか確認してください…
-
Eclipse による Java プログラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
フローチャート
-
この警告はどうすれば?
-
[Ljava.lang.Stringってなんですか
-
配列で、値の入っている要素数...
-
C#で動的配列Listの中身をListB...
-
配列の中に複数存在する数がい...
-
セッションを使ったint型の値の...
-
【C#】ハッシュテーブル(連想...
-
javaについて
-
javaでの文字列からの数字抽出
-
配列について
-
javaで大容量テキストファイル...
-
配列数を超えてアクセスしたと...
-
【Ajax通信&Java】配列の受け取...
-
『args[]』とは?
-
ArrayListからBean配列に値をセ...
-
C言語でunsigned char配列を連...
-
strutsで2次元配列をやりとりす...
-
javamailで複数人にメールを送...
おすすめ情報