こんにちは。
javaの問題なのですが、問題文が理解できなかったので質問させていただきます。
問題文
Ex54で作成したRectangleクラスを継承するPlaceRectangleクラスを作成する
Ex54
import java.io.*;
class Rectangle{
private int width;
private int height;
public Rectangle(){
width=0;
height=0;
}
public Rectangle(int w, int h){
width=w;
height=h;
}
public int getArea(){
return width*height;
}
}
class Ex54{
public static void main(String args[])throws IOException{
BufferedReader br = new BufferedReader
(new InputStreamReader(System.in));
int num=0;
while(num < 2){
System.out.print(">");
String wid = br.readLine();
System.out.print(">");
String hei = br.readLine();
int num1 = Integer.parseInt(wid);
int num2 = Integer.parseInt(hei);
Rectangle rectangle1 = new Rectangle(num1, num2);
System.out.println("インスタンスr" + (num+1) + "の面積は" + rectangle1.getArea());
num++;
}
}
}
---------------------------------------------------------------
PlacedRectangleクラス
四角形の位置をx座標y座標で表す。
長方形の左端を示しx座標は右に大きくy軸は下に大きくなる。
・次の三つのコンストラクタを持つ
(1)引数なし
(2)位置の引数付き
(3)位置と大きさの引数付き
いづれのコンストラクタも位置のセットはsetLocationメソッドを実行する
大きさのセットはスーパークラスのコンストラクタを呼ぶ
(コンストラクタで値を設定しているのになぜ再設定(位置のセット、大きさのセット)する必要があるのか分かりません。)
・setLocationメソッドは位置をセットする
mainメソッドから次の操作をする
1引数無しでPalacedRectangleのインスタンスaを作成
2引数12と34でPlacedRectangleのインスタンスbを作成
3引数31と41と59と26でPlacedRectangleのインスタンスcを作成
1、2、3ともそれぞれのインスタンスの位置と面積を表示する
実行例
インスタンスaの面積は1534
位置は(12,13)です。
UML図
PlacedRectangle
-----------------
-x:int
-y:int
-----------------
+PlacedRectangle()
+PlacedRectangle(x:int,y:int)
+PlacedRectangle(x:int,y:int,width:int,height:int)
+setLocation(x:int,y:int):void
「疑問点」
コンストラクタで値を設定しているのになぜ再設定(位置のセット、大きさのセット)する必要があるのか分かりません。
main文のwhile(num < 2){というところをスッキリさせたい(処理が2回しかないため)何かよい方法はないでしょうか?
よろしくおねがいします。
No.2ベストアンサー
- 回答日時:
コンストラクタの名前(PlaceRectangle)とクラス名(PlacedRectangle)が一致していないからです。
一致していないので、コンストラクタではなくPlaceRectangleという名前のメソッドだと解釈されていて、戻り値がないと怒られています。
x軸y軸の表示は・・・
私なら、PlacedRectangleにgetX():int, getY():intを作り、
Ex70側で
System.out.println("位置は(1" + r1.getX() + "," + r1.getY() + ")です。")
とします。
あるいは位置を表示するだけのshowLocation()のようなものをPlacedRectangleに作るか
この回答への補足
ご回答ありがとうございます。
プログラムはこんな感じになったのですが
class Rectangle{
private int width;
private int height;
public Rectangle(){
width=0;
height=0;
}
public Rectangle(int w, int h){
width=w;
height=h;
}
public int getArea(){
return width*height;
}
}
class PlacedRectangle extends Rectangle{
private int x;
private int y;
public PlacedRectangle(){
setLocation(0,0);
}
public PlacedRectangle(int x, int y){
setLocation(x,y);
}
public PlacedRectangle(int x, int y, int w, int h){
super(w, h);
setLocation(x,y);
}
void setLocation(int x,int y){
this.x=x;
this.y=y;
}
void showLocation(){
System.out.println("位置は" + x + "," + y + "です。");
}
}
class Ex70{
public static void main(String args[]){
PlacedRectangle a = new PlacedRectangle();
System.out.println("インスタンスaの面積は" + a.getArea() + "です。");
a.showLocation();
PlacedRectangle b = new PlacedRectangle(12,34);
System.out.println("インスタンスbの面積は" + a.getArea() + "です。");
b.showLocation();
PlacedRectangle c = new PlacedRectangle(31,41,59,26);
System.out.println("インスタンスcの面積は" + a.getArea() + "です。");
c.showLocation();
}
}
インスタンスcの面積が0と表示されるばかりで
思うような結果が得られません。
どなたかアドバイスをお願いいたします。
ご回答ありがとうございました。
エラーメッセージが「戻り値の型が必要です」
という表示があったのでそっちばかりに気がいってしまって
コンストラクタとクラス名の記述には
気が回っていませんでした・・・
x,y軸の表示は専用のメソッドを作り、見やすくなりました。
ありがとうございました^^
No.3
- 回答日時:
mainメソッド内をもう一度チェックしてみましょう。
# これくらい自分で気づけないとダメです。
# コピー&ペーストでソースを作ることが危険なことを理解しましょう。
私の補足にお気づきありがとうございます。
次回からはコピペする際はただやみ雲にするのではなく
ちゃんと意味を把握しながら行っていきたいと思います。
ご回答ありがとうございました^^
No.1
- 回答日時:
>コンストラクタで値を設定しているのになぜ再設定(位置のセット、
>大きさのセット)する必要があるのか分かりません。
「再設定」ですか?たぶん問題文を読み間違えたのかな?
コンストラクタの中でのセットの仕方を言っているのだと思いますよ?
>いづれのコンストラクタも
>位置のセットはsetLocationメソッドを実行する
>大きさのセットはスーパークラスのコンストラクタを呼ぶ
例えばこういう↓書き方はせずに、
public PlacedRectangle(){
this.x = 0;
this.y = 0;
}
public PlacedRectangle(int x; int y){
this.x = x;
this.y = y;
}
こういう↓風にしてよ、ってことです。
public PlacedRectangle(){
this.setLocation(0, 0)
}
public PlacedRectangle(int x; int y){
this.setLocation(x, y);
}
public void setLocation(int x, int y){
this.x = x;
this.y = y;
}
大きさの設定はちょっと自分で考えてみてください。
スーパークラスのコンストラクタを呼ぶというところを正しく理解することがこの課題のキモだと思いますので。
#しかし、ものすごい勢いで課題をこなしてますねえ(笑)
この回答への補足
ご丁寧に解説頂きありがとうございます。
プログラムが完成したかと思ったのですがコンパイルエラーが起きてしまったみたいです。
class Rectangle{
private int width;
private int height;
public Rectangle(){
width=0;
height=0;
}
public Rectangle(int w, int h){
width=w;
height=h;
}
public int getArea(){
return width*height;
}
}
class PlacedRectangle extends Rectangle{
private int x;
private int y;
public PlaceRectangle(){
this.setLocation(0,0);
}
public PlaceRectangle(int x, int y){
this.setLocation(x,y);
}
public PlaceRectangle(int x, int y, int width, int height){
super(width, height);
this.setLocation(x, y);
}
public void setLocation(){
this.x=x;
this.y=y;
println("位置は" + x + y + "です。");
}
}
class Ex70{
public static void main(String args[]){
PlaceRectangle a = new PlaceRectangle();
println("インスタンスaの面積は" + a.getArea() + "です。");
PlaceRectangle b = new PlaceRectangle(12,34);
println("インスタンスbの面積は" + a.getArea() + "です。");
PlaceRectangle c = new PlaceRectangle(31,41,59,26);
println("インスタンスcの面積は" + a.getArea() + "です。");
}
}
このような感じに仕上がったのですが
public PlaceRectangle(){
this.setLocation(0,0);
}
public PlaceRectangle(int x, int y){
this.setLocation(x,y);
}
public PlaceRectangle(int x, int y, int width, int height){
super(width, height);
this.setLocation(x, y);
}
この3箇所の部分で「メソッドの宣言が不正です。戻り値の型が必要です」とのメッセージでした。
ちなみにpublic void setLocation(){
this.x=x;
this.y=y;
System.out.println("位置は" + x + y + "です。");
}
}
の部分でx軸y軸の表示を行っても大丈夫でしょうか
どなたかよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c# デリゲート関連の命名について
-
SAStrutsでActionからJSPに値を...
-
リサージュ図形
-
Javaでポインタ的なことはでき...
-
コード中の謎のエラー
-
javaのエラーの意味がわかりま...
-
デスクトップのアイコンの位置...
-
Javaで簡単なアニメーションを...
-
西暦 -> 年号、年号 -> 西暦の...
-
熟語を判別し構文解析してくれ...
-
式の型は配列型で int に解決済...
-
Start:アプレットは初期化され...
-
因数分解メソッドの改良
-
配列にnullを代入すると、null...
-
C#で動的配列Listの中身をListB...
-
C言語のポインターに関する警告
-
Javaで改行などが出来ないのです。
-
配列を逆順させて表示させる方...
-
応用情報技術者試験の令和元年...
-
getStringの値がNULLの時の処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
javaでカレンダー作成
-
Javaで電卓を作りたい
-
SwingでJtableのヘッダ行が表示...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
C#で実行時にメソッドの返り値...
-
(Swing)JTextFieldを半角のみ入...
-
c# デリゲート関連の命名について
-
Javaでポインタ的なことはでき...
-
複数のボタンを配置し、それぞ...
-
javaのエラーの意味がわかりま...
-
JUnit4のアノテーションについて
-
sin曲線とcos曲線を描くプログ...
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
おすすめ情報