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

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

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

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

Q&A

解決済

4回答

2969閲覧

javaのプログラミングに関する質問です

anna10

総合スコア24

Java

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

0グッド

0クリップ

投稿2015/01/08 10:32

質問内容が複数あるので、ここで纏めて質問させて頂きます。


底辺の数字を入力させて、三角形を出力して下さい
※但し、偶数や0が入力された場合は奇数を入力するまで
再度入力できるようにして下さい
例)底辺を入力して下さい

5


▲▲▲
▲▲▲▲▲
という問題について、以下がコードになります。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

class Delta {
public static void main(String[] args) throws IOException {

// BufferedReader&InputStreamReaderのインスタンス化
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// while文ループ
while(true){
System.out.println("底辺を入力して下さい");
System.out.println(">");

// キーボードから文字を読み込む String str = br.readLine(); int input = Integer.parseInt(str); // inputが奇数であるなら if(input % 2 == 1){ for (int i = 1; i <= input; i++) { for (int j = 1; j <= (input - i); j++){ System.out.print(' '); } for (int j = 1; j <= 2 * i - 1; j++){ System.out.print("▲"); } System.out.println(); } }

}
}

とりあえず出来たのですが、現在は「底辺の数」ではなく、「三角形の段数」で出力されてしまっています。普通に三角形を出力するのは別段苦労する事も無いのですが、「底辺の数」をキーボード入力からどのようにしたら出力出来るようになるのか全く分かりません。

ここから先は丸投げになってしまうのでアレなのですが。。。。

入力した金額に日本の硬貨がそれぞれ何枚必要かを出力して下さい
例)金額を入力して下さい

763

500円玉 = 1枚
100円玉 = 2枚
50円玉 = 1枚
10円玉 = 1枚
5円玉 = 0枚
1円玉 = 3枚

金額を入力して下さい

666

500円玉 = 1枚
100円玉 = 1枚
50円玉 = 1枚
10円玉 = 1枚
5円玉 = 1枚
1円玉 = 1枚

金額を入力して下さい

777

500円玉 = 1枚
100円玉 = 2枚
50円玉 = 1枚
10円玉 = 2枚
5円玉 = 1枚
1円玉 = 2枚

金額を入力して下さい

888

500円玉 = 1枚
100円玉 = 3枚
50円玉 = 1枚
10円玉 = 3枚
5円玉 = 1枚
1円玉 = 3枚

金額を入力して下さい

3672

500円玉 = 7枚
100円玉 = 1枚
50円玉 = 1枚
10円玉 = 2枚
5円玉 = 0枚
1円玉 = 2枚

という問題で、文字ストリームとwhile文ループで回すのは分かりますが、入力された金額がいかに上記の用に分けられるのか?というのが意味不明です。分岐にしても、何を条件式とすればいいのか。。。。

以上になりますが、どちらかの回答だけでもとても助かります。
どうかよろしくお願い致します。

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

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

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

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

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

guest

回答4

0

ベストアンサー

1は例そのまま出力できればいいんですよね???

lang

1import java.util.Scanner; 2class Delta { 3 public static void main(String[] args) { 4 Scanner sc = new Scanner(System.in); 5 while(true){ 6 System.out.println("底辺を入力して下さい"); 7 System.out.println(">"); 8 int input = sc.nextInt(); 9 for(int i = 1; i <= input; i += 2) { 10 for(int j = 0; j < i; j++) System.out.print("▲"); 11 System.out.println(""); 12 } 13 } 14 } 15}

投稿2015/01/08 14:11

kinme

総合スコア843

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

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

anna10

2015/01/08 14:35

回答誠にありがとう御座います。①は例が、「5を入力したら底辺が5個の正三角形が出力される」というものなので、実際はキーボードから入力された奇数分の底辺数、例えば「9」を入力したら底辺が9個ある正三角形が表示される、というようなコードにしなければなりません。分かりにくくて申し訳ありません。
kinme

2015/01/08 17:09

あぁなるほど、正三角形を作るんですね。 実行してないですが、 下記のようなロジックになるかと思います。 //奇数になるまで入力ループ for(int i=1;i<=input;i++){ for(int j=0;j<input-i;j++){ //スペース出力 } for(int j=0;j<input;j++){ //▲出力 } //改行出力 }
anna10

2015/01/09 14:40

何度も回答して頂きありがとう御座いました。無事に完成させる事が出来ました。重ねて感謝申し上げます。
guest

0

①はどういったルールで三角形が作りたいのか謎なので、ちょっとパスで。
正三角形?直角三角形?角度の比が決まっている?

②はこんな感じですかね。
コンソールからの入力部分は①と同じように作るといいかと思います。

lang

1 /** 硬貨の定義(3円玉とかできたらここに足すとか) */ 2 private static final int[] COINS = {500, 100, 50, 10, 5, 1}; 3 4 /** 5 * めいん 6 */ 7 public static void main(String[] args) { 8 9 // 何枚? 10 Map<Integer, Integer> ans = howMany(3672); 11 12 // コンソールに表示 13 for (Entry<Integer, Integer> entry : ans.entrySet()) { 14 System.out.println( 15 entry.getKey() + "円は" + entry.getValue() + "枚"); 16 } 17 } 18 19 /** 20 * それぞれの硬貨を何枚ずつ利用するか 21 * 22 * @param money 金額 23 */ 24 private static Map<Integer, Integer> howMany(int money) { 25 26 // 結果保持用 27 Map<Integer, Integer> res = new LinkedHashMap<Integer, Integer>(); 28 29 // 残っている分(最初は渡した金額そのまま) 30 int remainder = money; 31 32 // 使用する硬貨の枚数を最小にするには大きいものから使う 33 for (int coin : COINS) { 34 35 // この硬貨を使う枚数 36 int cnt = remainder / coin; 37 38 // 残り 39 remainder = remainder % coin; 40 41 // 硬貨の金額と使用枚数を設定 42 res.put(coin, cnt); 43 } 44 45 return res; 46 }

商と余りを上手に使うのがポイントですね。

投稿2015/01/08 13:43

nyago_d

総合スコア178

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

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

anna10

2015/01/09 14:40

回答誠にありがとう御座います。とても助かりました。
guest

0

①ですが、底辺÷2で得た値を切り上げれば段数が出せるので、それでループを回すのはどうでしょう。
1/2=0.5 → 1段
3/2=1.5 → 2段
5/2=2.5 → 3段
7/2=3.5 → 4段
9/2=4.5 → 5段
11/2=5.5 → 6段

投稿2015/01/08 13:34

hiroki8080

総合スコア254

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

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

hiroki8080

2015/01/08 13:54

②はちょっと面白いのでやってみました。 public static void main(String[] args){ int[] divideList = {500, 100, 50, 10, 5, 1}; // 割る値の一覧 List<Integer> resultList = new ArrayList<Integer>(); int target = 3672; // 計算対象 int calcResult = 0; for(int divide : divideList){ // 割った枚数を結果に追加しながら、余りを使って計算を繰り返す calcResult = calc(target, divide, resultList); target = calcResult; } // 結果表示 for(int i=0; i<resultList.size(); i++){ System.out.println(divideList[i] + "円玉=" + resultList.get(i) + "枚"); } } // 計算メソッド public static int calc(int target, int divide, List<Integer> resultList){ int result = 0; resultList.add(target / divide); // 割った枚数を結果に追加 result = target % divide; // 余りを返す return result; }
anna10

2015/01/09 14:43

回答誠にありがとう御座います。とても参考になり、只感謝するのみです。本当にありがとう御座いました。
guest

0

②だけですが、Javascriptでもよろしければw
アルゴリズムは非常に単純なので、普通に流用はできるかと思います。

lang

1var inputData = 777; 2var Yen500, Yen100, Yen50, Yen10, Yen5, Yen1; 3 4var buf = inputData; 5inputData = inputData % 500; 6Yen500 = (buf - inputData) / 500; 7buf = inputData; 8inputData = inputData % 100; 9Yen100 = (buf - inputData) / 100; 10buf = inputData; 11inputData = inputData % 50; 12Yen50 = (buf - inputData) / 50; 13buf = inputData; 14inputData = inputData % 10; 15Yen10 = (buf - inputData) / 10; 16buf = inputData; 17inputData = inputData % 5; 18Yen5 = (buf - inputData) / 5; 19buf = inputData; 20inputData = inputData % 500; 21Yen1 = inputData; 22 23// result 24console.log('500円: '+Yen500); 25console.log('100円: '+Yen100); 26console.log('50円: '+Yen50); 27console.log('10円: '+Yen10); 28console.log('5円: '+Yen5); 29console.log('1円: '+Yen1);

結果

lang

1500円: 1 2100円: 2 350円: 1 410円: 2 55円: 1 61円: 2

追記:
アルゴリズムの分かりやすさ優先で書きましたが、あまりに美しくなかったので、ちょっと普通な書き方をしたのも乗っけときます。
蛇足なので気にしないで下さいー。

lang

1var inputData = 777; 2var data = [ 3 { 4 label: '500円', 5 money: 500, 6 count: 0 7 },{ 8 label: '100円', 9 money: 100, 10 count: 0 11 },{ 12 label: '50円', 13 money: 50, 14 count: 0 15 },{ 16 label: '10円', 17 money: 10, 18 count: 0 19 },{ 20 label: '5円', 21 money: 5, 22 count: 0 23 },{ 24 label: '1円', 25 money: 1, 26 count: 0 27 } 28]; 29var buf = 0; 30 31data.forEach(function(val){ 32 buf = inputData; 33 inputData = inputData % val.money; 34 val.count = (buf - inputData) / val.money; 35}); 36 37// result 38data.forEach(function(val){ 39 console.log(val.label + ': ' + val.count); 40});

投稿2015/01/08 11:57

utun

総合スコア384

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問