• ベストアンサー

どんな条件式を使えばいいですか?

luckymakoの回答

  • luckymako
  • ベストアンサー率55% (29/52)
回答No.3

switch を使わない方法もあります。 商品が増えてもプログラム本体を書き換える必要がありません。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Vendor {  public static void main(String[] args) throws IOException {   int size = 3;   String[] goods = new String[size];   int[] price = new int[3];   int[] count = new int[3];      goods[0] = "AAA";   price[0] = 100;   count[0] = 0;   goods[1] = "BBB";   price[1] = 250;   count[1] = 0;   goods[2] = "CCC";   price[2] = 300;   count[2] = 0;      int pocket = 1000;   int cheap = price[0];   for(int i = 1; i < size; i++)    if(price[i] < cheap)     cheap = price[i];      while(0 <= pocket - cheap){    System.out.println("You have " + pocket + " .");    System.out.println("Please choice.");    for(int i = 0; i < size;)     System.out.println(goods[i] + " " + price[i] + " --- " + ++i);        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));    String input = br.readLine();        if(input.length() == 0)     continue;        int num = input.charAt(0) - '1';    if(0 <= num && num < size){     if(price[num] <= pocket){      pocket -= price[num];      count[num]++;     }    }   }      System.out.println("You have " + pocket + " .");   System.out.println("You bought these. ");   for(int i = 0; i < size; i++)    System.out.println(goods[i] + " " + price[i] + " --- " + count[i]);  } }

j-dean
質問者

お礼

う~ん・・・ ちょっと初心者の私にはif文がありすぎて難しかったです。 でもだからこそ、ちゃんと理解してこういう記述が書ける人って すごいな~と思いました。 自分もこんなプログラムが書けるようになりたいです。 もっと上達したらluckymakoさんのプログラムを参考にして switch文を使わないプログラムも書いてみたいと思います。 ありがとうございました。

関連するQ&A

  • Excel VBAで、Application.InputBoxのキャンセルと入力値ゼロを区別したい。

    VBA初心者です。 Application.InputBox(メソッド)で、キャンセルが選択されたら処理を終了し、数値が入力されたら計算をしたいのですが、ゼロを入力した場合にFalseと見なされて処理を終了してしまいます。ゼロを入力しても処理を続けるには、どのように記述すれば良いのでしょうか?よろしくお願いします。

  • 難解な式を条件により動作するようにしたい!!!

    セルI6に、1/1と入力されています。 セルF6には("10日")と入力されています。 セルK6には式で、K6=I6+F6-2 と入力して、 F6で選択された日数("10日")を足して、 そこから2日前を 自動的に表示されるように式が入っています。 ここで表示される値は「1/8」と、ここまではOKなのですが、 更にこの結果の値を     「土曜、もしくは日曜日の場合は前の金曜日の日付を返す」 という条件で完成させたい・・・。 結果的にK6には「1/8」を自動的に表示させたいので =IF(F6<>"10日",IF(ISNUMBER(1/DAY(I6)/DAY(I6+F6-2)),I6+F6-2-(WEEKDAY(I6+F6-2,2)>5)-(WEEKDAY(I6+F6-2,2)>6),"")) という式で、この問題をクリアしているのですが 最後にもう1つ、 ("10日")と選択されているセルは、 プルダルン式のセルで10日~15日を選択出来るようになっていて この式を「10日」以外が選択された場合に適用されるようにしたいのです。 なので「11日」~「15日」が選択された場合に =IF(ISNUMBER(1/DAY(I6)/DAY(I6+F6-2)),I6+F6-2-(WEEKDAY(I6+F6-2,2)>5)-(WEEKDAY(I6+F6-2,2)> の式で動くようにするには、どうすれば良いでしょうか? もし出来たら、ご教授願います。

  • 値出力の条件

    Java勉強中の初心者です。 入力した値を出力するときに 必ず、"-"(ハイフン)を入力しなければ ならないのですが、 条件に、"-"(ハイフン)がない場合か 複数入力された場合、は"もう一度お願いします。" と出力をしたいのですが、if文の 条件の記述がわかりません。 なにかいいメソッドがあるのでしょうか? よろしければご教授お願いいたします。 (ハイフンが1つ入力されたらそのまま 出力します。) import java.io.*; public class Test1 { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String s = br.readLine(); //ここに条件 } }

  • cgi perlの条件式にて

    変数が、数値の場合はA、それ以外はBの処理としたい場合、どのようにすればよいでしょうか。 if ($in{'volume'} == 〇〇〇){A;}else{B;} (1)全角で入力された数字も数値として扱う場合 (2)全角で入力された数字は数値として扱わない場合

    • ベストアンサー
    • Perl
  • [VB2005]処理を完全に中止する方法を教えて頂けませんか?

    VB2005で開発しています。 あるイベントからメソッドを呼び、そのメソッドも次のメソッドを呼ぶような 処理があるとします。 この場合に、最上位のイベント以外から、 このイベントの処理をすべて終了する方法はございませんか? 最上位のイベントであれば、 Exit Subと書けば、そのイベント内の処理はすべて終了されると思いますが、 それを、下位のメソッドで行いたいのです。 このようなことはできないのでしょうか? もし方法がございましたら、教えて頂きたいです。 ぜひ、よろしくお願いいたします。

  • ServerSocketのaccept()の記載位置について

    ServerSocketのaccept()を、main()以外のメソッド 内から呼び出したい、と思っています。 しかし、そのように記載すると、プログラムが 完全に、そこで止まってしまい、他の処理が 一切できないようになってしまいます。 main()内に書くと、ボタンなどのイベントを 拾えるのに、main()以外に書くと、処理が止まって しまいます。 accept()は、main()内に書くことしかできないのでしょうか。(できたら、ボタンを押して、サーバーの起動、 停止ができるようにしたいのですが)。 お願いします。

    • ベストアンサー
    • Java
  • AccessでBetween条件を含むクエリーで、Between条件を

    AccessでBetween条件を含むクエリーで、Between条件を入力しなくてもデータを抽出するには? Access97でデータの抽出を行いたいと思います。 「顧客名」「商品名」「出荷日」という項目を含むクエリーから、希望のデータを抽出するフォーム(名:検索フォーム)を作成しています。 検索フォームにそれぞれ「顧客名」「商品名」「出荷開始」「出荷終了」という名前の非連結のテキストボックスを作り(規定値を"*"にしています)、それに値を入力すると、これらのテキストボックスの下に配置したサブフォームに抽出されたデータが抽出される様にしたいのです。 現在、クエリーの「顧客名」項目の抽出条件に「[forms]![検索フォーム]![顧客名]」という様に入力し、同じ様な記述を「商品名」項目にも行い(条件は[商品名]としています)、出荷日に「Between[forms]![検索フォーム]![出荷開始]And[forms]![検索フォーム]![出荷終了]」と記述しています。(これらは全てAnd条件にしています) さて、この検索フォームの値入力項目で、全てのテキストボックスに入力しなくても(1つ以上値が入力されていれば)データをサブフォームに抽出できるようにしたいのです。 現在、「出荷開始」&「出荷終了」に値を入力すれば、その他の値(「顧客名」と「商品名」)を入力してもしなくてもデータが抽出できますが、「出荷開始」&「出荷終了」を入力しない限りデータが抽出されません。 この「出荷開始」&「出荷終了」を入力しないケースでもデータが抽出できる様なフォームを作成したいのですが、 どの様に記述を変えたらよいでしょうか?

  • exitとreturnの使い分け

    通常の開発でexitは使ってもいいのでしょうか? main以外の関数でbool型でmainに処理を戻しプログラムを終了させるのと、関数内でexitを使い処理を終了させることの違いと具体的にどういう場合に使い分けたらいいのかを教えてください。 できるだけ詳しく教えてもらえるとうれしいです。

  • Javaプログラム内容について

    添付資料の処理内容がわからないので、どこが違うかご指摘ねがいます。 1.mainのgetInversedArray(4,8,9)がint[]メソッドに飛ぶ 2.newで4 8 9を別々に扱えるようにする 3.forのa[i] = array[(array.length - 1) - i]が9 8 4を出力する←ココの処理が特にわからない 4.mainのforで、int[]メソッドの値を出力する 3.の処理内容を教えて頂きたいのと、I++がいまいち感覚が掴めていないです。 forで使用すれば、指定した値を1ずつ増加させて上限まで計算させるものという認識なので、for内では、(4 8 9)の値に対して、0から1ずつ足して~9までの10サイクルを計算しているから、10個の出力が出てきそうなのに、3個の出力しか出てきてない。あれ?という状態です。 散漫な文章ですみませんが、ご協力宜しくお願いします。

    • ベストアンサー
    • Java
  • モジュール分割

    以下のようなJAVAプログラムを作成しなさい。 ただし単一のクラスのmainメソッドのみから構成されるプログラムにすること 1個以上の整数を入力して、それらの合計、平均、最大値、最小値を求めて出力する。 されに入力された整数を、入力された順序で表示する。入力された順序と逆に表示する。昇順にソートして表示する。降順にソートして表示する。これらの処理は、整数の入力後に、繰り返し入力できる。 動作例 入力する整数の個数(1個以上)を指定してください 4 整数を入力してください 1個目:3 2個目:6 3個目:2 4個目:7 処理を選択してください 1.合計 2.平均 3.最大 4.最小 5.順表示 6.逆順表示 7.昇順ソート 8.降順ソート 0.終了 2 <平均> 4.5 処理を選択してください 1.合計 2.平均 3.最大 4.最小 5.順表示 6.逆順表示 7.昇順ソート 8.降順ソート 0.終了 0 というものなのですが自分でやってみたところ一つ一つ動作することはできるのですが、 繰り返しの処理になると何故か終了が機能しなくて困っています。 もうあまり時間もなくて出来れば解答をお願いしたいのですけど、 どなたかわかる方がおりましたらお願いいたします。