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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

4回答

4823閲覧

c♯で乱数を使って出した数字を偶数奇数に分けて表示させる方法

Seeeveeen

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2021/03/13 08:05

c#で乱数を使い、だした数字を
「偶数:~~~
奇数:~~~」
というように表示させるという問題で以下のように書きました。

Random rnd = new Random(); for (int i = 0; i < 11; i++) { int dise = rnd.Next(1, 101); if (dise % 2 == 0) { Console.WriteLine("偶数:" + dise); } else { Console.WriteLine("偶数:" + dise); } }Console.WriteLine();

そうしたら結果が
「偶数:~偶数:~奇数:~・・・・」
となってしまいました。ifの中身が違うのであろうことはわかっているのですが正しい書き方がわかりません。

TN8001👍を押しています

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

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

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

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

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

y_waiwai

2021/03/13 08:08

結果がどうなったら正しいんでしょうか
Seeeveeen

2021/03/13 08:22

わかりにくくてすみません。 例えば乱数で 12,13、14、15、16、17、18、19、20、21 が出てきた場合、今、 偶数:12奇数:13偶数:14奇数:15偶数:16奇数:17偶数:18奇数:19偶数:20奇数:21 みたいになっていて、なってほしいことは、 偶数:12 14 16 18 20 奇数:13 15 17 19 21 という感じです。
guest

回答4

0

色々やり方はありますが、何点かヒントを。

  • for文の中は繰り返し処理されるから、forの中で奇数偶数の文字を出力すれば、当然繰り返し出力されますよね。であれば…?
  • Randomで奇数と偶数を取得する事までは出来ているので、あとはその数値を仕分けするだけです。とりあえずListを使ってみてはどうでしょう。

List<T> クラス

C#

1using System; 2using System.Collections.Generic; 3 4namespace ConsoleCore 5{ 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 List<int> listNumber = new List<int>(); 11 listNumber.Add(1); 12 listNumber.Add(2); 13 listNumber.Add(3); 14 15 foreach (int number in listNumber) 16 { 17 Console.Write($"{number} "); // 1 2 3 と出力される 18 } 19 20 // for文がいいなら… 21 for (int i = 0; i<listNumber.Count; i++ ) 22 { 23 Console.Write($"{listNumber[i]} "); 24 } 25 } 26 } 27}

投稿2021/03/13 15:30

編集2021/03/13 16:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Seeeveeen

2021/03/14 04:06

ありがとうございます。解決しました。
guest

0

まず、今のプログラムの書き方で無理があるのは、
『出てきた順番に書くので、偶数と奇数が入り乱れる』という事になっている点ですね。

なので、『11個の乱数を全部作っておいてから、中身を確認し、偶数だけを取り出して書く。次の行に奇数だけを取り出して書く。』
という方法が良いかと思います。
(結果は10個じゃなく、11個で合ってます?)

もう少しプログラム的な書き方にすると・・・
1.まず11個の配列を用意し、乱数を11個の配列に全部入れます。
2.その配列を最初から最後の箱まですべて確認し、偶数だけを取り出して画面に出力する。
3.その配列を最初から最後の箱まですべて確認し、奇数だけを取り出して画面に出力する。
というやり方でどうでしょうか?


もしくは、今のプログラムの形を変えない(1個のfor文で、乱数を1つ作る毎にその都度判定する)場合は、
偶数の結果を覚える文字列と、奇数の結果を覚える2つの文字列を用意しておき、
質問の所に載っているプログラムの画面出力をしている所を、その文字列に連結して覚えて行く方法に変更し、
全部終わったら(for文を抜けたら)それぞれ画面に出す。
という方法もあります。

どちらにしても、「その都度出力」でなく、「ため込んでいき、最後に出力」という考えは同じです。

投稿2021/03/13 13:45

woodcube

総合スコア32

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

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

Seeeveeen

2021/03/14 04:06

ありがとうございます。解決しました。
guest

0

ベストアンサー

ifの中身が違うのであろうことはわかっているのですが正しい書き方がわかりません。

ループの中でConsole.WriteLineしたら、そうなるのはわかっているわけですよね?

まとめて出力するには何らかの方法で答えを貯めておき、最後にConsole.WriteLineすればいいでしょう。

例えば文字列変数を用意して、ループ中では変数に足していきます(even += dice + " ";等)

cs

1string even = "偶数:"; 2string odd = "奇数:"; 3 4// ループ省略 5 6Console.WriteLine(even); 7Console.WriteLine(odd);

投稿2021/03/13 13:42

編集2023/07/26 14:56
TN8001

総合スコア9244

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

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

Seeeveeen

2021/03/14 04:06

ありがとうございます。解決しました。
guest

0

if (dise % 2 == 0)

{ Console.WriteLine("偶数:" + dise); } else { Console.WriteLine("偶数:" + dise); }

なんかよーわからんけど、両方とも偶数になってる、ってことかな?


偶数:12 14 16 18 20

奇数:13 15 17 19 21
という感じです。

ということであれば、ループで出した乱数を一旦配列にでも置いといて、後でまとめて出力するようにしないといけませんね

投稿2021/03/13 08:16

編集2021/03/13 08:25
y_waiwai

総合スコア87719

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

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

Seeeveeen

2021/03/13 08:23

すみません。それは単純に質問の内容と関係ない自分のミスです。
Seeeveeen

2021/03/14 04:07

すみません。解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問