C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

文字の種類をカウントしたい。(Java)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■84869 / inTopicNo.1)  文字の種類をカウントしたい。(Java)
  
□投稿者/ ひかり (9回)-(2017/08/10(Thu) 13:39:19)

分類:[Java] 

Javaで「ランダムに5つの数字を出力し、その数字が何種類あるかをカウントする」というプログラムを組みたいです。

0,5,5,2,3
4種類

といったような…。

どなたか、教えてください!(よろしくお願いいたします!)


2つ目の数字を1つ目と比較、違えばカウントを1増やす。
3つ目の数字を1つ目、2つ目と比較、違えばカウントを1増やす…。
この繰り返しなのだろうとは思うのですが、「else」のときにどうソースを書き込めばいいのかもわからず……。


以下が、現在のソースコードです。
―――――

package chart;
import java.util.Random;

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

		int count = 1;

		int rnd1 = new Random().nextInt(6);
		int rnd2 = new Random().nextInt(6);
		int rnd3 = new Random().nextInt(6);
		int rnd4 = new Random().nextInt(6);
		int rnd5 = new Random().nextInt(6);

		System.out.print(rnd1 + ",");
		System.out.print(rnd2 + ",");
		System.out.print(rnd3 + ",");
		System.out.print(rnd4 + ",");
		System.out.println(rnd5);

		if(rnd2 != rnd1){
			count++;
		}else{
			count = count;
		}

		if(rnd3 != rnd1 || rnd3 != rnd2){
			count++;
		}else{
			count = count;
		}

		if(rnd4 != rnd1 || rnd4 != rnd2 || rnd4 != rnd3){
			count++;
		}else{
			count = count;
		}

		if(rnd5 != rnd1 || rnd5 != rnd2 || rnd5 != rnd3 || rnd5 != rnd4){
			count++;
		}else{
			count = count;
		}

		System.out.println(count);
	}
}

引用返信 編集キー/
■84870 / inTopicNo.2)  Re[1]: 文字の種類をカウントしたい。(Java)
□投稿者/ プリン (1回)-(2017/08/10(Thu) 14:59:07)
とりあえず、rnd1〜rnd5が1文字の数字であることを条件とすると、
以下の方法が手っ取り早いのではないでしょうか?

rnd1〜rnd5は配列にする。
空のString型変数(str)を用意する。
rnd1〜rnd5をループで回す。
変数strにrnd[i]の文字が含まれなければ
strにrnd[i]を文字列結合する。
(変数strにrnd[i]の文字が含まれている場合は何もしない)

ループを抜けたとき、変数strの文字数が答えとなる。



引用返信 編集キー/
■84871 / inTopicNo.3)  Re[2]: 文字の種類をカウントしたい。(Java)
□投稿者/ とっちゃん (450回)-(2017/08/10(Thu) 15:49:52)
No84869 (ひかり さん) に返信
> Javaで「ランダムに5つの数字を出力し、その数字が何種類あるかをカウントする」というプログラムを組みたいです。
>
> 0,5,5,2,3
> 4種類
>
> といったような…。
>
夏休みの課題かな?なんか明らかに宿題感が出てるのであえて答えは書かずにいろいろ考えてみたいと思います。

まずは、与えられた課題をもう少し丁寧に解釈してみましょう。
問題文は句読点の前後でデータの準備編とそのデータの活用編に分かれていることが読み取れます。

まずは前半の「ランダムに5つの数字を出力し」という部分。

ここの文脈をよく読んでみると、
「ランダム」
「5つ」
「数字」
「出力」
の4つのキーワードが浮かび上がってきます。

これらキーワードのうち「出力」というのはほかの3つとは異なり
プログラム的動作を指します。こちらは添付ソースでも使っているように
ほかの3つのキーワードから作り上げたデータ(まだどのようなものか不明)を
コンソールへ出力するという意味でいいと思います。

では3つのキーワードから用意されるデータはどのようなものになるのかを考えていきます。

まず最初に着目するのはデータの種類を表すと考えられる「数字」。
日本語で「数字」と表現する場合、大半の状況で「数値文字」に相当するデータを表します。
具体的には、整数の0〜9という値か、'0', '1', ...'9' という文字のどちらかですね。
今回はどちらでもいいと思います。

次が生成方法と受け取れる、「ランダム」。

「ランダムに5つの数字を出力」というだけだと、ゲームの専門学校とかだと、
表示画面(ゲームスクリーン)の任意の5か所に、0〜9のいずれかの数字を
実行ごとに一致しないような場所に表示する
ということも考えられます。
添付のソースを見る限りそこまでは意図していないと考えられるので
ここでは、「Random クラスを使って生成する0〜9までの整数値」をコンソールに「出力」する。
と解釈するので十分と考えます。

最後がデータの量を表す「5つ」。
ここでは5個のデータという意味だと思いますので、一連の集合体として扱う
と考えるのが妥当でしょう。

授業で配列も習っていると思いますので、前半の意図としては
「Random クラスを使って0〜9の数値データを5要素の配列に格納し」
それをコンソール画面にカンマで区切って「出力」する。
というのが前半部分の意図になると思います。


続いて後半の「その数字が何種類あるかをカウントする」
こちらから浮かび上がってくるのは
「何種類あるかをカウントする」
という、プログラム的な動きが想定できます。

こちらは課題の本編だと思いますので、まずはじっくりと考えてみる必要があります。
これまでの授業で習ってきたこと(繰り返しとか分岐とか)を踏まえて
どうすれば種類を判断できるのか。
数を数えるにはどうするかを考えればいいと思います。

すでにヒントも出ています。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ