• 締切済み

Javaのプログラミングについてご指導お願いします。

現在Javaを勉強しています。 このたび下記の実行結果となるように、次のソースにコードを追加しなくてはいけなくなったのですが、どうすればよいかわからずまったく手をつけることができません。 【ソース】 ・ Shopping.java class Shopping { public static void main(String args[]) { Fruit fruit; //下で生成するFruitクラス型オブジェクト名の定義 int price = 0; //商品検索結果(単価)を格納する変数 switch(args.length){ //コマンドライン引数の個数を判定 case 1: //コマンドライン引数が1つ(商品名のみ)の場合の処理を記述 //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // Fruitクラスのオブジェクトを生成 // 商品検索(Fruitクラスのsearch()メソッドを実行) // 結果表示(Fruitクラスのdisplay ()メソッドを実行) case 2: // コマンドライン引数が2つの場合の処理を記述 //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // Fruitクラスのオブジェクトを生成 // 商品検索(Fruitクラスのsearch()メソッドを実行) // 結果表示(Fruitクラスのdisplay ()メソッドを実行) default: // コマンドライン引数が1つ,2つ以外の場合の処理を記述 //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // 引数の個数が違うエラーメッセージを表示する } } } ・ Fruit.java public class Fruit{ // インスタンス変数の定義 private String fName; //商品名 private int fNum; //個数 // 商品リストの登録(商品名、単価) String[][] fruittable = { {"Strawberry","500"},{"Apple","150"},{"Orange","100"}, {"Mango","1500"},{"Banana","200"},{"Peach","400"} }; // 商品名と個数を引数にもつコンストラクタの定義 //****** ここにコンストラクタの定義を追加します ********* //search()メソッド 単価を戻す int search(){ //search()メソッドの戻り値retval int retval = -1; //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* //商品リストにコマンドライン引数から入力した商品名と同じ商品名があるか検索し、 //見つかった場合は単価を戻す。見つからなかった場合は、-1を戻す。 } // display ()メソッド 引数として単価を受け取る void display(int price){ //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // 商品名、単価、個数、合計金額を画面に表示する // 商品名が見つからなかった場合には、エラーメッセージを表示する } } 【実行結果】 ☆ 商品名と個数を入力すると、商品名、単価、個数、合計金額を表示する(個数が入力されない場合は1個とみなす) > java Shopping Orange 商品:Orange 単価:100円 個数:1個 合計:100円 > java Shopping Orange 3 商品:Orange 単価:100円 個数:3個 合計:300円 ☆ 商品が見つからなかった場合には、エラーメッセージを表示する > java Shopping Melon 3 Melonは商品ではありません。 ☆ 引数の数が0または3つ以上の場合は、エラーメッセージを表示する > java Shopping Orange Apple Peach 引数には商品名と個数を入力してください。 【条件】  (1) Shoppingクラスはmain()メソッドを持つ。  (2) 実行時の引数に商品名と個数を入力する。個数が入力されなかった場合は1とみなす。  (3) Fruitクラスのsearch()メソッドは、商品が存在するかどうかを検索するメソッドで、商品が存在した場合は単価を戻す。商品が見つからなかった場合には-1を戻す。  (4) Fruitクラスのdisplay ()メソッドは、商品名、単価、個数から合計金額を計算して表示するメソッドである。商品が登録されていない場合はメッセージを表示する。 Javaの先輩方に、どのようにコードを打てばよいのかご解説頂ければと思います。 恐れ入りますがよろしくお願いします。

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

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

恐らく質問者さんは 問題の意味すらわかっていないんじゃないかしら。 だからどうすればいいのかが判らないのよ。 その状態で答えを得ても何も身につかないわよ。 なので問題解決のための手順を書くわ。 1.まずは、問題を理解するの。   入力に対してどのような結果を出せばいいのか書き出すのよ。   この場合Orange 3を入力すると商品リストを利用して   商品:Orange、単価:100円、個数:3個、合計:300円を   出力するのよね。   他にも引数が足りない場合とかのパターンもあるけど、   最初のうちは正常系だけを考えておけばいいわ。   例外系は後付しましょう。 2.次に、プログラムじゃなく、自分自身だったら   それをどのように出力するのか考えるのよ。   この場合、商品リストの中からOrangeに対応する100を取りだし   3とかけて300を得る、みたいにね。   そうすれば今度はそれをコードで実現することを考えればいいわ。 最初のうちはこんな風に考えていくの。 今のはmainメソッドの話だけど 問題中にはsearchやdisplayメソッドもあるから それも同じように考えていくのよ。 Javaはオブジェクト指向だから こういう考え方で実装できるのよ。 そもそも最初に与えられているコードが理解できないなら 勉強のやり直しね。 あなたにはこの問題を解くには早すぎるわ。 初心者にありがちな問題の解き方として 書かれている内容をそのまま実装しようとするの。 それはそれでいいんだけど でもそれだともったいないわ。 そこしか勉強にならないもの。 問題を解くのに時間は掛かるけど 全体を見るのはとても大切なことよ。 経験を積んでいくと先に考えた内容をそのまま実装するのではなく 性能面でも保守面でも効率の良い実装をできるようになるわ。 でも最初のうちにそれを考えるのはとても難しいから 最初のうちは考えをまるまま実現するだけの実装を目指すのよ。

関連するQ&A

  • javaについてです。

    このプログラミング全部を教えて下さい。 staticでないものでお願いします。 ●CustomerManagerクラスに以下のフィールドを作成する  ・他のクラスからアクセスできない長さ5のCustomerCardの配列  ・整数型フィールド(名称:index、初期値0) ●CustomerManagerクラスに以下のメソッドを作成する   ・メソッド1  メソッド名:addCustomerCard  引数1:整数型  引数2:文字列型  動作:    ・配列のindex番目にCustomerCardインスタンスを作成    ・作ったインスタンスに引数の2つを設定    ・indexを1増やす ・メソッド2  メソッド名:printAllInfo  引数なし  動作:   配列にいれられた全てのCustomerCardの情報を表示する ●mainメソッドを以下のように修正する  addCustomerCardメソッドを使って以下の情報を登録する     ID = 1 , 名前 = "山田一郎"   ID = 2 , 名前 = "鈴木太郎"   ID = 3 , 名前 = "田中次郎"  printAllInfoメソッドを使って登録された全ての情報を表示する 以上よろしくお願い致します。

    • ベストアンサー
    • Java
  • Javaの課題が全くわかりません。

    この前学校からJavaの課題が出まして、全くわかりません。 <テストクラス>(ファイル名:Test.java) <フィールド> なし <メソッド> 1.メインメソッド 「ここからはテストクラスの流れを書きます」 ・アドレスサーチクラスを生成 ・アドレスサーチクラスのInitialize()メソッドを呼ぶ ・アドレスサーチクラスのSearchName()メソッドを呼ぶ ・検索結果を表示する <アドレスサーチクラス>(ファイル名:AddressSearch.java) <フィールド> 1.アドレス配列(3000個分) <メソッド> 2.住所録ファイル入力設定 (メソッド名) public void Initialize() 「ここからはテストクラスの流れを書きます」 ・住所録ファイルから1行目入力 ・1行を各項目に分解 ・アドレスクラスのインスタンスを生成 ・アドレスクラスのインスタンスに分解した各項目を設定 ・アドレス配列にインスタンスを格納 3.氏名検索 (メソッド名) public Address SearchName(String name) 「ここからはテストクラスの流れを書きます」 ・アドレス配列から氏名を探す ・一致した氏名のインスタンスを戻す  一致しない場合、nullを返す 長くなりました。このような条件でプログラムを作るのは私にはあまりわかりませんでした。googleなどで検索してもあまり良い情報がありません。もしこの問題が解ける方がいらっしゃるなら、ぜひアドバイスやプログラムなどを教えてくれたらありがたいです。

  • javaのソースコードがわかりません

    初心者には難しすぎるのでおしえてください。 クラス名 Advance5 ※main()メソッドがあるクラス Sub5_StaticCheck 指示 Advance5 クラス main()メソッド Sub5_StaticCheck クラスのcallDisp()メソッドを呼び出す ※インスタンスを生成せずに実行 Sub5_StaticCheck クラス callDisp()メソッド 定義 修飾子 : public キーワード : static 戻り値の型 : void 引数 : なし 指示 disp()メソッドを実行する その際、BufferedReader クラスを使用してキーボードから文字列を1 つ入力し、入力した文字列を引数として1つ渡す disp()メソッド 定義 修飾子 : public 戻り値の型 : void 引数 : String 型の値を1つ 指示 引数で受け取った値を表示する

  • Javaのパッケージについて初歩的な質問です

    Javaのパッケージについて質問です このコードの1番最後のZenhanクラスのdoTogameメソッドを呼び出しているところで, パッケージ化していてimportされていないのに クラス名.メソッド名でエラーなしで処理できるのはなぜですか? 同じパッケージ名だからだですか? mainメソッドでimportしてるからですか?教えてください

  • Access2010 レポートについて

    商品というテーブルと商品マスターというテーブルがあります。 商品テーブルに入力した商品コードをもとに、商品マスターから直接レポート上に単価の項目を呼び出したいのですが、どうすれば良いのですか? (両テーブルの商品コードが一致した場合、マスターテーブルの単価の項目を呼び出す) クエリで必要な項目を表示させ、レポートにするしか方法はないのでしょうか? 【商品テーブル】 商品コード   商品名      個数  123     りんご        10  456     みかん       20  789     バナナ       30 【商品マスター】 商品コード   商品名      単価  123     りんご       100  456     みかん       200  789     バナナ       300 【レポート】※商品テーブルをもとに 123   個数    単価 りんご    10    100 ←商品マスターから直接表示したい

  • Access2010 レポートについて

    商品というテーブルと商品マスターというテーブルがあります。 商品テーブルに入力した商品コードをもとに、商品マスターから直接レポート上に単価の項目を呼び出したいのですが、どうすれば良いのですか? (両テーブルの商品コードが一致した場合、マスターテーブルの単価の項目を呼び出す) クエリで必要な項目を表示させ、レポートにするしか方法はないのでしょうか? 【商品テーブル】 商品コード   商品名      個数  123      りんご        10  456      みかん       20  789      バナナ       30 【商品マスター】 商品コード   商品名      単価  123      りんご       100  456      みかん       200  789      バナナ       300 【レポート】※商品テーブルをもとに 123    個数    単価 りんご    10     100 ←商品マスターから直接表示したい

  • 継承について(長文です)

    いつもお世話になっています。現在、継承についての練習問題を解いているのですがわからないことがあるので質問させていただきます。 問題は、「自己紹介メソッド(抽象メソッド)を持つIntroduceクラスを作成し、そのクラスを継承してFistsNameクラス、FullNameクラス、IncludeAgeクラスを作成しなさい。三つのサブクラスのインスタンスを混合して配列に保持し自己紹介をしなさい」というものです。 それぞれのクラスはコマンドライン引数で名字(引数一つ)だけ、フルネーム(引数二つ)、フルネームと年齢(引数三つ)と3種類の引数を入力することによって適切なメソッドが呼び出されるということです。(わかりにくい文章ですいません。例えばヤマダと入力すればFirstNameクラスの自己紹介メソッドが呼び出されてヤマダと表示させたいのです)引数をサブクラスに渡さないと行けませんが、まずコンストラクタで引数をサブクラスに渡す場合は引数を一つ(もしくは二つ)しか指定しなかったときはフルネームとフルネーム+年齢のクラスでコンパイルエラー(ArrayIndexOutOfBoundsException)が出ます(これは理解することが出来ます)次にメソッドで渡す場合はシグネチャが異なるのでオーバーライドされずこちらもコンパイルエラーとなります。この他に引数をサブクラスに渡す方法はあるのでしょうか? わかりにくい文章になってしまいましたが、要するに三つのサブクラスをインスタンス化しその後、引数の個数により適切なサブクラスのメソッドが呼び出され引数を連結して表示させたいのです。このようなことは実現できないのでしょうか?if節によって引数の個数で場合分けなどをしないといけないのでしょうか?質問文がわかりにくければ補足させていただきます。よろしくお願いします。

    • ベストアンサー
    • Java
  • JavaのGUIプログラミング

    javaのGUIプログラミングでメニューを作成したのですが、どうしてわからないところがあります。 ルートペインにメニューを追加した後、各々の処理を記述しようとするときに、 ActionListenerを実装したクラスのactionPerformedメソッドでイベントが起きたものをif文で場合分けして、それぞれの処理を記述していますが、これがいい方法だとはどうしても思えません。 自分なり考えた結果、 ・各メニューごとにクラスを作成してそこに処理を書き込む ・匿名のインナークラスを使用する を思いついたのですが、初心者なのでこの場合に応用できません。 分かりにくい文章で申し訳ないのですが、なにかアドバイスをいただけないでしょうか? できれば、参考になるソースをのせてくれると勉強しやすいので助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのメソッド呼び出し

    javaで質問があります。メソッドを呼び出すとき、 クラス.メソッド(引数)だと思いますが、 「.」が2つあるものがあります。 どういったものでしょうか? あるプログラムに Code.PerComFlag.ReCom.equals(atmlogDTO.getatmComFlg()) のがありました。 また、javaの本に System.out.println(・・・) という記述もあります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • データベース処理のプログラミングについて

    データベースを処理するためのプログラムを作成していますが、そのコーティングで悩んでいます。 説明が長くなってしまいますが、お付き合いいただける方、ご教示頂ける方がいらっしゃることを、切に願います。 まずは現在の状況説明ですが、下記のような感じでプログラムを作っています。 データベースに、Table1があります。 ・Table1・・・fld1~fld10までの10個のフィールドがあり、fld1が主キー また、このテーブルを処理するためのクラスがあります。 ・データベース処理系のクラス・・・clsTable1 clsTable1では、各フィールドを、メンバ、プロパティとして作ってあります。 ・メンバ:_fld1、 プロパティ:fld1 ・・・ メンバ:_fld10、 プロパティ:fld10 また、Table1に対してSQLを発行するためのメソッドがあります。 ・SelectRecord・・・主キーで検索して1件だけ返すメソッド(検索のためfld1が必要) ・InsertRecord・・・Insert用メソッド(fld1~fld10の全てが必要) ・UpdateRecord・・・主キーで検索し、該当するレコードのfld2を更新するメソッド(検索値のfld1と更新値のfld2が必要) また、あるフィールドの範囲検索などをするメソッドとして、 ・SelectRecords・・・fld3を範囲検索して複数レコードを返すメソッド(fld3をBETWEEN演算子で検索するためfld3minとfld3maxが必要) を作成した場合は、fld3minとfld3max用のメンバとプロパティを追加しています。 これらのメソッドは全て引数なしになっていて、フォームなどから使う場合は必要なプロパティに値を代入してから各メソッドを呼んでいます。 そのため、メソッドを呼び出す際には、どのプロパティを設定する必要があるのかが分からないです。 (作っている時は記憶で、メンテの時はコメントやソースを見て判断しています。) これを改善するために、設定が必要なフィールド全てを各メソッドの引数にしてしまえば良いのかとも思ったのですが、そうするとInsertRecoedの引数は10個になります。 仮にフィールド数が100列のテーブルだったりした場合は引数が100個になってしまうので、それもダメだろうと思っています。 Insert以外でも、詳細な検索などが必要な場合や、全フィールドのUpdateの場合にも、引数が多くなりすぎです。 どんな感じにすればよろしいのでしょうか? また、みなさんは、どんな感じにされているのでしょうか? 開発環境: SQL Server 2000 Standard Visual Basic 2010 Express