Javaのオーバーロードを使った問題

このQ&Aのポイント
  • JavaのクラスBookには、異なる引数のコンストラクタとメソッドが定義されています。
  • Bookクラスのコンストラクタとinfoメソッドを使って、本の情報を表示するためのソースコードを書く必要があります。
  • forループを使って、複数の本の情報を表示することができます。
回答を見る
  • ベストアンサー

Javaのオーバーロードを使った問題

class Book{ String title, size; int price; Book(String title, String size, int price){ this.title = title; this.size = size; this.price = price; } public String info(){ return title + " " + size; } public String info(String title){ return title + " " + size + " " + price +"円"; } public int info(String title, String size){ return price; } } ________________________________________________________ class Book_test{ public static void main(String[] args){ String[] title = {"図鑑","参考書","雑誌","地図"}; String[] size = {"B4", "A5", "A4", "A3"}; int[] price={4500, 1800, 600, 1400}; Book[] b = new Book[4]; for(int i=0; i<b.length; i++){ b[i] = ****; } for(int i=0; i<b.length; i++){ System.out.println(***); } for(int i=0; i<b.length; i++){ System.out.println(***); } for(int i=0; i<b.length; i++){ System.out.println(***); } } } 実行結果は、以下の通り 図鑑 B4 参考書 A5 雑誌 A4 地図 A3 図鑑 B4 4500円 参考書 A5 1800円 雑誌 A4 600円 地図 A3 1400円 4500 1800 600 1400 このように表示するために、javaのソースコードを書かなくてはならないのですが、***の部分に何を入れれば良いのか分かりません。 特に、for文の部分です。 classが苦手なので分かりやすく教えていただけると幸いです。

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

オーバーロードは型や個数が異なる引数に対して同じ処理があるときに使うもので、互いに無関係な処理を同一のメソッド名にするために使うものではありません。 こんなオーバーロードの使い方を教える人の講義なり何なりを受けるのはやめなさい。 本なりサイトなりの記述だったらそんなものを読むのはやめなさい。 学校の宿題だったら、……しょうがないので回答書きますのでこのまま提出してください。 1番目:new Book(title[i], size[i], price[i]) 2番目:b[i].info() 3番目:b[i].info("こんな糞コード教えるんじゃねーよ") 4番目:b[i].info("この悪口に怒るのは勝手だけどさぁ、", "これでもちゃんと指定した実行結果どおりの表示をするから正解だろ?")

route_32
質問者

お礼

回答ありがとうございます。 学校の宿題です(汗) >オーバーロードは型や個数が異なる引数に対して同じ処理があるときに使うもので、互いに無関係な処理を同一のメソッド名にするために使うものではありません。 なるほど…、勉強になります。 実行結果になるようにいじった所、 b[i].info() b[i].info(title[i]) b[i].info(title[i],size[i]) でしょうか? 上記部分に関しては、先生に質問してみようと思います。 回答ありがとうございました^^

その他の回答 (2)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.3

> Ans1の方の3番目が間違っているので、以下で。 > 3番目:b[i].info(title[i]); アィエェェ……速やかにセプクすべきミスでした。 teketon様、ご指摘ありがとうございます。

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

Ans1の方に同意します。これはゴミ。 Ans1の方の3番目が間違っているので、以下で。 3番目:b[i].info(title[i]); 講師も多分、実行していないコードですね。

route_32
質問者

お礼

なるほど…。 これは先生放置で、独学で勉強した方が良さそうですね…。 回答ありがとうございました!

関連するQ&A

  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • Java プログラミング エラー

    public class kadai1 { public static void main(String[] arg){ /* Book クラスからインスタンスを生成*/ Book myBook = new Book("The Java Tutorial",55); System.out.println("My book title = " + myBook.getTitle()); System.out.println("My book title = " + myBook.title); System.out.println("My book price = " + myBook.getPrice()); System.out.println("My book price = " + myBook.getYenPrice()); /*Book クラスからインスタンスを生成*/ Book yourBook = new Book("The Java Programming Language",40); System.out.println("Your book title = " + yourBook.getTitle()); System.out.println("Your book price = " + yourBook.getPrice()); } } class Book{ //クラスbook の宣言 String title; //題名 private int price; // 価格(ドル) Book(String t, int p){ //コンストラクタ title = t; //題名の設定 price = p; //価格の設定 } public String getTitle(){ // 題名の取得 return title; } public int getPrice(){ // 価格の取得 return price; } public double getYenPrice(){ return price*111.58; } } このとき「Exception in thread "main" java.lang.NoSuchMethodError: Book.getYenPrice()D」 というエラーがでるんですが、これはgetYenPrice()というメソッドはないといってきてるんでしょうか? 作ってるんですがどういうことなんでしょう。

    • ベストアンサー
    • Java
  • Javaプログラミングについて

    ・下記のプログラミングで「//ここで配列を昇順にソートする」というプログラムがわかりません!! わかる方がいましたらサンプルを教えてください。 public class SortNum { public static void main(String[] args){ int[] a={5,9,3,1,7,8,2,6,4}; //数列の初期化 //ここで配列を昇順にソートする //ソートされた配列を出力 for(int i = 0;i < a.length;i++){ System.out.println(a[i]); } } }

  • 簡単なマインスイーパーをJavaで作りたいです。

    Javaの勉強をしたいと思い下のソースのマインスイーパーを ウィンドウ上で実行できるようにしたいです。 そのときに他のソースから呼び出す形にしたいです。 どのようにしたら良いでしょうか?教えてください。 出来ればソースがあるとありがたいです。 import java.util.Scanner; public class MineSweeper extends MinePrinter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); MineSweeper game = new MineSweeper(); game.displayStrblock(); while (!game.dead) { System.out.println("\n:爆弾数・・・" + game.mines); System.out.println("\n:場所を選んでください"); System.out.println("縦の場所の数字を入力"); int tate = Integer.parseInt(sc.next()); System.out.println("横の場所の数字を入力"); int yoko = Integer.parseInt(sc.next()); game.mineClick(tate, yoko); game.displayStrblock(); } } } class MinePrinter { String[][] strblock = new String[5][5]; int[][] blocks = new int[5][5]; int mines = 0; boolean dead = false; public MinePrinter() { mineSet(); } void mineClick(int i, int j) { if (aroundManyMines(i, j) == 99) { System.out.println("burst!!!"); System.out.println("You Dead!!\n"); strblock[i][j] = "*"; dead = true; } else { strblock[i][j] = Integer.toString(aroundManyMines(i, j)); } } void mineSet() { for (int i = 0; i < blocks.length; i++) { for (int j = 0; j < blocks[i].length; j++) { if (Math.random() < 0.2) { blocks[i][j] = 99; mines += 1; } else { blocks[i][j] = 0; } } } for (int i = 0; i < strblock.length; i++) { for (int j = 0; j < strblock.length; j++) { strblock[i][j] = "#"; } } } void displayStrblock() { for (int i = 0; i < strblock.length; i++) { for (int j = 0; j < strblock.length; j++) { System.out.print(strblock[i][j] + " "); } System.out.println(":" + i); } } int aroundManyMines(int i, int j) { if (blocks[i][j] == 99) { return 99; } int ans = 0; for (int r = -1; r <= 1; r++) for (int c = -1; c <= 1; c++) { try { if (blocks[i + r][j + c] == 99) { ans += 1; } } catch (ArrayIndexOutOfBoundsException e) { continue; } } return ans; } }

    • ベストアンサー
    • Java
  • Javaの初歩的なプログラムについて

    public class ForInFor{ public static void main(String[] args){ for(int i=1; i<=9; i++){ String a = ""; for(int j=1; j<=9; j++){ a += i * j + " "; } System.out.println(a); } } } を実行すると九九の表のようになりました。 println(a)の中のaはjの方のforの繰り返しが終わったら代入するものだと思っていましたので 戸惑っています。 実際にはどういう流れで九九の表ができるのでしょうか?

  • arraycopy コンパイルエラー

    javaの勉強をしているのですが arraycopy()を使ったプログラムでエラーが出てしまいます。 class Ex97{ public static void main(String args[]){ int []a = new int[10]; int []b = new int[5]; for(int i=0; i<10; i++){ a[i] = (int)(Math.random()*10); } System.arraycopy(a, 2, b, 0, 5); for(int i=0; 0<a.length-1; i++){ System.out.println(a[i]); } System.out.println(""); for(int i=0; 0<b.length; i++){ System.out.println(b[i]); } } } /*メッセージ Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at Ex32.main(Ex32.java:13) */ このプログラムはaの3番目の要素から5つ分の内容をbへコピーする というものです。 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaの文字列配列について質問です

    父は1月5日生まれです。 母は4月12日生まれです。 私は8月7日生まれです。 というような表示をさせたいのですが、出来ません。 したがソースなのですが何方か教えて頂けないでしょうか class Birth{ String name; int human; int day; Tower (String h, int m, int d){ human = h; mon = m; day = d; } void showBirth (){ System.out.println(human+"は"+mon+"月"+day+"生まれです。"); } } public class Hiniti{ public static void main(String[] args) { String [] name = {"父", "母", "私"}; int [] tuki = {1, 4, 8}; int [] niti = {5, 12, 7}; for (int i; i<name.length; i++){ Birth [] b = new Birth[name.length]; for(int i = 0; i < b; int i++){ b[i] = new Birth(name[i], tuki[i], niti[i]); b[i].showBirth(); } } } }

    • ベストアンサー
    • Java
  • Javaの文字列配列について質問です

    父は1月5日生まれです。 母は4月12日生まれです。 私は8月7日生まれです。 というような表示をさせたいのですが、出来ません。 したがソースなのですが何方か教えて頂けないでしょうか class Birth{ String name; int human; int day; Tower (String h, int m, int d){ human = h; mon = m; day = d; } void showBirth (){ System.out.println(human+"は"+mon+"月"+day+"生まれです。"); } } public class Hiniti{ public static void main(String[] args) { String [] name = {"父", "母", "私"}; int [] tuki = {1, 4, 8}; int [] niti = {5, 12, 7}; for (int i; i<name.length; i++){ Birth [] b = new Birth[name.length]; for(int i = 0; i < b; int i++){ b[i] = new Birth(name[i], tuki[i], niti[i]); b[i].showBirth(); } } } }

  • javaプログラミングの質問です。

    プログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } }

    • ベストアンサー
    • Java
  • 配列のインデックス番号を返したいが

    インデックス番号を返したい x[0]=1 x[1]=2 x[2]=3 x[3]=3 x[4]=5 の場合で探す(返す)値を3とした場合⇒2,3と値が返るようにしたい import java.util.*; class Test7_23 { static int[] arraySrchIdx(int[] a,int x){ int idx = 0; for(int i=0;i<a.length;i++){ //A if(a[i]==x){ a[i] = i; idx++; } else{ a[i] = 0; } } for(int i=0;i<a.length;i++) //B System.out.println(a[i]); int[] b = new int[idx]; for(int i=0;i<a.length;i++){ if(a[i] != 0) for(int j=0;j<idx;j++) b[j]=a[i]; } for(int i=0;i<idx;i++) System.out.println("b["+i+"]="+b[i]); return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("配列の要素数は:"); int n = std.nextInt(); int[] x = new int[n]; for(int i=0;i<n;i++){ System.out.print("x["+i+"]="); x[i] = std.nextInt(); } System.out.print("探す値:"); int a = std.nextInt(); int[] b = arraySrchIdx(x,a); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } } }

専門家に質問してみよう