まず、どういうロジック(論理)で組んだのかを説明できますか?
つまり、『日本語なりの自然言語で説明してくれ』です。
ご自分で考えられているようなのでダメとは言いませんが、無駄が多い気がします。
まず、プログラミングは『こう書けばいい』ではなく、
『プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である』です。
つまり、『現実世界でならどうするか』です。
今回の場合、言い換えると、
[依頼]
あなたは0~5までの目で構成されているさいころがあり、そのさいころを振っていき、
0が出るまで繰り返します。
そして、0が出たら、『0が出るまでの繰り返し回数は〇回です』と言ってください。
みたいなものですね。
私なら、
1. 0が出るまで以下を繰り返す
1.1. さいころを振る
1.2. 出た目が0かどうか調べ,
1.2.1. (0であれば)終了する
1.3. それ以外(0以外の目)なら
1.3.1. カウントする
2. 結果発表
的な感じにすると思います。
後はこれを実装すればいいだけです。
(1)は while(true) なり、while + 『0以外なら』系でループさせる。
(1.2) は 乱数発行。(1.2.1) は if文とその条件式で実装可能。
...と言う風にやる。
後はこれをコーディングし、デバッグし、テストする。
これだけです。
[追記1]
実行自体はできるのですが、乱数で0が出ても止まらず、無限ループしてしまいます
当たり前です。
ロジックを読みましょう。
他人が書いたコードや自分が書いたコード、なんでもいいですが、とにかくコードを読むときは、
一行レベルで、なにをやっているかを考えながら読むです。
たとえばコメント文として記述するとかです。
Java
1package Renshu;
2
3public class Toi {
4 public static void main(String[] args) {
5
6 // 条件式: true.(= つまり無限ループ)
7 while(true) {
8 // 変数x, kaisuを宣言
9 int x,kaisu;
10 // kaisu に 0 を代入する
11 kaisu=0;
12 // x は 乱数……発行?
13 x=(int)(11*Math.random());
14 // "x>>" + x を出力
15 System.out.println("x>>"+x);
16 // iの初期値: 0, xが 0である間, i++ しながら処理
17 for(int i=0;x==0;i++) {
18 // kaisu をインクリメント( i = i + 1 )
19 kaisu++;
20 // "0が出るまで..." と表示
21 System.out.println("0が出るまでの繰り返し回数は"+kaisu+"回です");
22 // ブロックから強制的に抜ける
23 break;
24 }
25 }
26 }
27}
ですね。
これを日本語でも英語でも韓国語でもスペイン語でもなんでもいいので、自分が読み書きできる言語で書き下しましょう。
Java
11. 以下を無限ループ
2 1.1. 変数x, kaisuを宣言
3 1.2. kaisuに0を代入
4 1.3. 乱数発行(?)しているのかな
5 1.4. iの初期値を0とし, xが0である間, インクリメントしながら以下を処理
6 1.4.1. kaisu をインクリメント
7 1.4.2. "0が出るまで..."云々のメッセージ表示
8 1.4.3. ブロックから強制的に抜ける( (1.4)だけ抜けて(1)に戻る )
これを現実世界でやってみましょう。
つまり、手作業で、(1)から(1.4.3)をやってみましょう。
脳内でもいいです。
そうすると、めちゃくちゃなロジックだという事が分かります。
なぜ、kaisuを(1.1) で宣言しているのでしょうか。
なぜ kaisuの初期値(厳密には代入)を(1.2)でやっているのでしょうか。
この場所でやると、(1)に戻る時には(厳密には(1.4)の後ぐらい) 破棄されるので意味がありません。
現実世界で考えてみてください。
今のやり方ですと、
ホワイトボードにカウントしていく。
でも次の乱数発行の際にはそのホワイトボードの内容をすべて消す。
また書いていく。(もちろん0から)
いつまでたっても kaisu > 0 にはなりません。(結果としてはね)
(1.4)の 『iの初期値を0とし, xが0である間, インクリメントしながら以下を処理』も変。
数直線で書いてみてください。
i 用と x 用です。
そうすると、何か変であることがわかるはずです。
x に代入したりとかしていないので、よくて x = 0 、悪ければ(そもそも初期化すらしていないので) でたらめな値になっているはずです。
C言語では、初期値を与えないと 0 または不定値( でたらめな値 ) が入ります。
言語によっては違うかもしれませんが、そういう風に 0 以外の値になっている可能性もあります。
仮に x = 0 だとしても、 『x が0である間』なのでこれも無限ループに陥る可能性がある。
(ただし、他の部分で落ちるが)
(1.4.2) での『"0が出るまで..."云々のメッセージ表示』も変。
日本語なり英語なりの自分が読み書きできる言語で考えてみてください。
そうすると、変であることがわかるはずです。
なんでここで表示しているのでしょうか。