🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

769閲覧

java インスタンスの生成について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/10/07 04:29

javaを勉強し始めたばかりの者です。
setterに制限をかけて指定した数以外の数字を入れるとエラーを返すようにする課題を解いているのですが、インスタンスの生成でつまづいています。

java

1class GetAndSet{ 2 private int day; 3 private int year; 4 5 public GetAndSet(int day, int year){ 6 this.day = day; 7 this.year = year; 8 } 9 10 public int getDay(){ 11 return this.day; 12 } 13 public int getYear(){ 14 return this.year; 15 } 16 17 public void setDay(int day){ //1-31以外の数字ならエラーと表示 18 if(day >= 1 && day <= 31){ 19 this.day = day; 20 }else{ 21 System.out.println("error"); 22 } 23 } 24 public void setYear(int year){ //1-2020以外の数字ならエラーと表示 25 if(year >= 1 && year <= 2020){ 26 this.year = year; 27 }else{ 28 System.out.println("error"); 29 } 30 } 31}

↑のif文でsetterを使うとき指定範囲外の数字を入らないようにしました。
ですが、実行ファイルでインスタンスをどう生成すればいいのかがよくわかりません。

java

1GetAndSet test = new GetAndSet() 2test.setDay(10); 3・・・

のようにしたくても引数がないのでエラーになってしまいます(コンストラクタの部分は課題の一部なので変えられません)。
でも、GetAndSet test = new GetAndSet(100, 2019);のように最初から引数を入れて作ると範囲外の数値が指定できてしまいます。
どうやって書けば良いのでしょうか?
初歩的な質問ですみません。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コンストラクタの部分は課題の一部なので変えられません

引数付きコンストラクタのみ宣言されている=引数付きコンストラクタで生成するしかありませんから、monthやdayの値は、あらかじめ範囲内の値のみ渡すか、そうでなければ別途 値の検証メソッドを作るのが1つの手でしょうか。

java

1class GetAndSet{ 2 private int day; 3 private int year; 4 5 public GetAndSet(int day, int year){ 6 this.day = day; 7 this.year = year; 8 } 9 10 public boolean validate() { 11 if (day >= 1 && day <= 31) { 12 return false; 13 } 14 if (year .......) ..... 15 return true; 16 } 17}

java

1GetAndSet gns = new GetAndSet(265, 1999); 2boolean check = gns.validate();

validateメソッドを引数ごとに分離するかどうかは、変数の個数やチェック内容を細分化するなどで変わってくるかと思います。

投稿2019/10/07 04:49

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/10/07 05:01

なるほど、そういった手法もあるのですね! 詰まってしまっていたので参考になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問