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

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

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

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

Q&A

解決済

2回答

2331閲覧

javaで描画出力をする方法

K.Yamaguchi

総合スコア14

Java

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

0グッド

0クリップ

投稿2018/12/05 05:14

前提・実現したいこと

下記プログラムでfreqの数値出力を"+"で数分+++++++++描画するにはどうすればいいのでしょうか?

import java.util.Random;

public class T_08_6 {
public static void main(String[] args) {

Random rand = new Random();//乱数発生準備

int freq[] = new int[7]; //要素7つ=サイコロ1-6の配列を生成 

for(int roll=1; roll<=100; roll++){ //サイコロを100回振る ++freq[1+rand.nextInt(6)]; //出た目をカウントする

}

for(int face=1; face<freq.length;face++) { System.out.println(face +":"+ freq[face]); //画面に出力 } }

}

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

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

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

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

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

yukkuri

2018/12/05 05:16

こーどは<code>で囲みましょう。
guest

回答2

0

ベストアンサー

たぶん出力は以下のような想定ですよね?

1: ++++ 2: ++ 3: ++++++ 4: + 5: +++++ 6: +++

こういう場合、繰り返し箇所はサイコロの目の分(1-6)と、それぞれの出現回数(+)になります。
やろうと思えば1重ループでできるかもしれませんが、単純に考えるなら2重ループで行いましょう。

投稿2018/12/05 05:22

dice142

総合スコア5158

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

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

K.Yamaguchi

2018/12/05 05:28

その通りです。どのようにすればいいのでしょうか?具体的にソースをご享受していただくようよろしくお願いします。
dice142

2018/12/05 05:35

> 具体的にソースをご享受していただくようよろしくお願いします。 すみませんが、まずは私の回答した2重ループと言うヒントを元に書いてみてください。
K.Yamaguchi

2018/12/05 05:50

いろいろやってみましたがうまくいきません。2重ループの場合 for(int face=1; face<freq.length;face++) の部分を分解し行うのでしょうか?よろしくお願いします。
dice142

2018/12/05 05:52

そもそも2重ループとは何か理解されていますか? どうやって見たかがわからないとアドバイスのしようがないです。
K.Yamaguchi

2018/12/05 05:57

現時点では数値を出すとこまでは理解しております。この数値を"+"に置き換える方法の知識がまだありません。お恥ずかしい限りです。
dice142

2018/12/05 06:00

間違っててもいいので(というか間違っているから質問する場なので)「いろいろやってみた」ことを挙げていただきたいです。 > 数値を"+"に置き換える方法の知識がまだありません。 例えば「+」を10回出力することはできますか?
K.Yamaguchi

2018/12/05 07:42

下記内容ではできます。よろしくお願いします。 int n = 10; for (int i=1;i<=n; i++) { System.out.print( "+" );
dice142

2018/12/05 07:44

いいですね。 それをfor (int face=1;....)のfor文の内側に入れ子で入れてあげればいいんです。
K.Yamaguchi

2018/12/05 08:21

Random rand = new Random();//乱数発生準備 int freq[] = new int[7]; //要素7つ=サイコロ1-6の配列を生成  for(int roll=1; roll<=100; roll++){ //サイコロを100回振る ++freq[1+rand.nextInt(6)]; //出た目をカウントする } for(int face=1; face<freq.length;face++) { for (int i=1;i<=freq[face]; i++) { System.out.print(face +":"+ ("+")); //(6)画面に出力 で結果は 1:+1:+1:+1:+1:+1:+1:+1:+1:+1:+1:+1:+2:+2:+2:+2:+2:+2:+2:+2:+2:+2:+2:+2:+2:+2:+2:+3:+3:+3:+3:+3:+3:+・・・・・・・ と1つずつの出力になってしまいます。
dice142

2018/12/05 08:34

ああ、惜しいですね。 サイコロの目は「+」の数に関係がないので、二重ループの内側に入れるとそうなってしまいます。 System.out.println()あるいはSystem.out.print()は複数使うことができるので、 サイコロの目はどこで、+はどこで表示すればよいか考えてみましょう。
K.Yamaguchi

2018/12/05 09:06

アドバイスありがとうございます。 現時点で Random rand = new Random();//乱数発生準備 int freq[] = new int[7]; //要素7つ=サイコロ1-6の配列を生成  for(int roll=1; roll<=100; roll++){ //サイコロを100回振る ++freq[1+rand.nextInt(6)]; //出た目をカウントする } for(int face=1; face<freq.length;face++) { System.out.print(face +":"); for (int i=1;i<=freq[face]; i++) { System.out.print("+"); //(6)画面に出力 } } } } の結果 1:+++++++++++++++++++++++++++++++++++++2:+++++++++++++++++++++++++++++++++++++++++3:++++++++++++++++++++++++++++++++・・・ となりました。 System.out.print(face +":"+ ("+")); //(6)画面に出力 を System.out.println(face +":"+ ("+")); //(6)画面に出力 に変更した場合 1:+ + + + + + + 2:+ + + + + + となります
dice142

2018/12/05 09:08

あとひといきですね。 多分最後のヒントになるかと思いますが、「改行も出力のひとつ」です。 適切な箇所に「改行のためのSystem.out.println()」を入れましょう。
K.Yamaguchi

2018/12/05 09:17

dice142様 本当に的確なアドバイスありがとうございました。 ソースを教えてほしいなど意味のないことをお聞きし本当に失礼いたしました。 理解しないと意味がない。考えないと前に進めない。 dice142様のお考え。誠にその通りだと思います。 最終出来ました。!(^^)! m(==)m for(int face=1; face<freq.length;face++) { System.out.println(); System.out.print(face +":"); for (int i=1;i<=freq[face]; i++) { System.out.print("+"); //(6)画面に出力 } } } } 結果 1:+++++++++++++++++++ 2:++++++++++++++++++++++++++ 3:++++++++++++++ 4:++++++++++++++++++++++++++++++++++ 5:++++++++++++++++++++++++ 6:+++++++++++++++++++++++++++++ 以上 ありがとうございました。m(==)m
dice142

2018/12/05 09:24

おめでとうございます。 無事作り上げれたようで良かったです。 これからも頑張ってくださいね。
K.Yamaguchi

2018/12/05 09:26

本当にありがとうございました。 頑張ります。!(^^)!
guest

0

すいません。完璧違いました。

diceさんの言っているとおり、二重ループにしましょう。
原文だと、

cmd

11:302:10

みたいになってしまいます。

原文

for(int face=1; face<freq.length;face++){ System.out.println(face +":"+ freq[face]); //画面に出力 }

だと、縦に並んでしまうので

for(int face=1; face<freq.length;face++){ System.out.print(face +":"+ freq[face]); //画面に出力 }

としましょう。

投稿2018/12/05 05:18

編集2018/12/05 05:26
yukkuri

総合スコア624

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問