質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Q&A

2回答

3406閲覧

[Java]オブジェクトを作成して標準入力から該当するデータを出力させたいです。

kimono

総合スコア10

Java

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

0グッド

1クリップ

投稿2016/07/31 13:35

編集2022/01/12 10:55

###前提・実現したいこと
Javaです。
5種類のパンについて、
人気の順位, 名前, 値段
の3つの情報を持つクラスを作り、標準入力から入力された順位のパンの情報を標準出力に出力するプログラムを作りたいです。

例(「3」⇨「人気3位のパンは食パンで価格は30円です。」)

###発生している問題・エラーメッセージ
ファイルBread.javaでフィールドを定義して、その下にメソッドを定義したいのですが、どのようなメソッドを書けばいいのかわかりません。また、標準入出力に関しては下のコードBreadManage.javaで書いたtry以下のもので間違い無いでしょうか?
よろしくお願いいたします。

###該当のソースコード
Java
ここにご自身が実行したソースコードを書いてください
(Bread.java)

java.io.*; import java.lang.*; public class Bread{ //name:名前 popular:順位 cost:価格 String name; int popular,cost; }

(BreadManage.java)

public class BreadManage { public static void main(String[] args) { Bread[] info = new Bread[5]; info[0] = new Bread(); info[1] = new Bread(); info[2] = new Bread(); info[3] = new Bread(); info[4] = new Bread(); info[0].name="あんパン"; info[0].popular= 1; info[0].cost=120; info[1].name= "カレーパン"; info[1].popular= 2; info[1].cost=200; info[2].name= "食パン"; info[2].popular= 3; info[2].cost=30; info[3].name= "メロンパン"; info[3].popular= 4; info[3].cost=250; info[4].name= "クリームパン"; info[4].popular= 5; info[4].cost=150; try { BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); String str; int rank; System.out.println("売上何位の商品が知りたいですか。"); str = br.readLine(); rank = Integer.parseInt(str); System.out.println("人気"+info[rank-1].popular+"位のパンは"+info[rank-1].name+"で価格は"+info[rank-1].cost+"円です。"); } catch (IOException e){ System.out.println("標準入力において例外が発生しました。"); } } )

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

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

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

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

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

yona

2016/07/31 13:48 編集

他の質問を見たことありますか?コードはコード用の記述に修正してください。 あと、どのようなメソッドを作りたいのでしょうか。
swordone

2016/07/31 13:47

どこでメソッド定義をしたいのか、またどこで間違っていると思っているのか、あるいはどこがうまくいかないのか、そのあたりの情報が足りません。
kei344

2016/07/31 13:49

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。
guest

回答2

0

こういうのを使うと便利ですよという紹介を。

  • HashMap<K,V>クラス

Key(キー)とValue(値)で、キーをもとに値を割り出すことができるクラス
これで配列の番号に依存せず検索でき、個数も不定のものができる

  • toStringメソッド

すべてのクラスのスーパークラスであるObjectクラスのメソッドで、System.out.print()等では自動的にこれを呼び出す。オーバーライドすることで出力内容を書き換えることができる

  • throw文

意図的に例外を発生させる。Exceptionを継承するクラスのオブジェクトを渡すことでその種類の例外が発生する。エラー文字列の表示もできる。

BreadsクラスのaddとgetでBreadクラスの内部をあまり意識せず使えるようにしてみました。
とりあえず、Breadは直接アクセスするのはBreadsだけなので内部クラスとして実装してみましたが、別に外部のクラスにしても影響はないです。
ファイル名をBread.javaからBreads.javaにする必要がありそうです。

java

1import java.util.*; 2 3 4//複数のパンを扱うクラス 5public class Breads 6{ 7 private HashMap<Integer, Bread> breads = new HashMap<Integer, Bread>(); 8 9 //要素の追加 10 public void add(String name, int populer, int cost){ 11 Bread b = new Bread(); 12 b.name = name; 13 b.populer = populer; 14 b.cost = cost; 15 breads.put(b.populer, b); 16 } 17 //要素の検索、取り出し 18 public Bread get(int populer){ 19 return breads.get(populer); 20 } 21 22 //パンのデータを扱う内部クラス 23 class Bread 24 { 25 String name; 26 int populer; 27 int cost; 28 //返す文字列 29 @Override 30 public String toString(){ 31 String str = ""; 32 str += "人気" + populer + "位"; 33 str += "のパンは" + name + "で"; 34 str += "価格は" + cost + "円です。"; 35 return str; 36 } 37 } 38} 39

java

1class BreadManager 2{ 3 public static void main(String[] args) { 4 //データの作成 5 Breads breads = new Breads(); 6 breads.add("あんパン", 1, 120); 7 breads.add("カレーパン", 2, 200); 8 breads.add("食パン", 3, 30); 9 breads.add("メロンパン", 4, 250); 10 breads.add("クリームパン", 5, 150); 11 //入力要求 12 System.out.println("売上何位の商品が知りたいですか。"); 13 int num; 14 try{ 15 num = Integer.parseInt(System.console().readLine()); 16 }catch(Exception e){ 17 throw new NumberFormatException("標準入力において例外が発生しました。"); 18 } 19 //データの表示 20 Breads.Bread b = breads.get(num);//クラス.内部クラス で内部クラス型を指定 21 if(b != null) 22 System.out.println(b); 23 else 24 System.out.println("その順位のデータはありません。"); 25 } 26 27}

これをそのまま流用するよりは、こういうクラスや構文があるんだなーと学習のきっかけしていただけると嬉しいです。

投稿2016/07/31 16:26

intelf___

総合スコア868

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

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

intelf___

2016/07/31 16:32

表現が少し不適切かもしれないので訂正を。 num = Integer.parseInt(System.console().readLine()); これは標準入力ではないのでエラー出力の文が少し不適切でした。 コンソール入力です。 BufferedReaderを用いる場合は標準入力のままで構いません。
guest

0

どういうことがしたいのか不明ですが、
とりあえず現状のソースではコンパイルすら通らないはず。

・BreadManage.javaの最後の)はいりません。
・BreadManage.javaで"info[rank-1].name"と文字列表示になってます。
・Bread.javaの1行目はいらないと思います。

Java

1public class Bread{ 2 //name:名前 popular:順位 cost:価格 3 String name; 4 int popular,cost; 5} 6

Java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4 5public class BreadManage { 6 public static void main(String[] args) { 7 Bread[] info = new Bread[5]; 8 9 info[0] = new Bread(); 10 info[1] = new Bread(); 11 info[2] = new Bread(); 12 info[3] = new Bread(); 13 info[4] = new Bread(); 14 15 info[0].name="あんパン"; 16 info[0].popular= 1; 17 info[0].cost=120; 18 19 info[1].name= "カレーパン"; 20 info[1].popular= 2; 21 info[1].cost=200; 22 23 info[2].name= "食パン"; 24 info[2].popular= 3; 25 info[2].cost=30; 26 27 info[3].name= "メロンパン"; 28 info[3].popular= 4; 29 info[3].cost=250; 30 31 info[4].name= "クリームパン"; 32 info[4].popular= 5; 33 info[4].cost=150; 34 35 36 try { 37 BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); 38 39 String str; 40 int rank; 41 42 43 System.out.println("売上何位の商品が知りたいですか。"); 44 str = br.readLine(); 45 rank = Integer.parseInt(str); 46 47 System.out.println("人気"+info[rank-1].popular+"位のパンは"+ info[rank-1].name +"で価格は"+info[rank-1].cost+"円です。"); 48 } 49 catch (IOException e){ 50 System.out.println("標準入力において例外が発生しました。"); 51 } 52 53 54 55 } 56} 57

投稿2016/07/31 15:02

kentei_syunrai

総合スコア946

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問