2017-03-11 9 views
-3

私はスドクゲームを作っています。最初は小さなバージョン3x3をやっています。いくつかのコーディングの後、私は道に見つけることができませんでした:私はSがその右の数までランダム化させるにはどうすればよいランダム番号をランダムにランダムにする方法

を(SはSkaiciai.Neradauが、それは繰り返し数を見つけられませんでした意味、ランダム化、Skaiciai.Yra_Toks_Skaiciusは、彼が見つかった意味しますすでに使用したのと同じ数)

EDIT:英語でのやり直しは

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
namespace _3x3 
{ 
    public partial class Form1 : Form 
    { 
     TextBox[] Boxes; 

     public Form1() 
     { 
      InitializeComponent(); 
      Boxes = new TextBox[] { textBox1, textBox2, textBox3}; 
     } 

     public enum Numbers 
     { 
      Found_Number, 
      NotFound 
     }; 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Random X = new Random(); 

      for (int i = 0; i < 3; i++) 
      { 
       int S = X.Next(1, 4); 

       switch (i) 
       { 
        case 0: 
         int A, B; 
         if (textBox2.Text == "") { A = 0; } else { A = int.Parse(textBox2.Text); } 
         if (textBox3.Text == "") { B = 0; } else { B = int.Parse(textBox3.Text); } 
         Numbers R = CheckIfThereIsNumber(S, new int[] { A, B }); 
         if (R == Numbers.NotFound) 
         { 
          textBox1.Text = S.ToString(); 
         } 
         break; 
        case 1: 
         int C, D; 
         if (textBox1.Text == "") { C = 0; } else { C = int.Parse(textBox1.Text); } 
         if (textBox3.Text == "") { D = 0; } else { D = int.Parse(textBox3.Text); } 
         Numbers T = CheckIfThereIsNumber(S, new int[] { C, D }); 
         if (T == Numbers.NotFound) 
         { 
          textBox2.Text = S.ToString(); 
         } 
         break; 
        case 2: 
         int E, F; 
         if (textBox1.Text == "") { E = 0; } else { E = int.Parse(textBox1.Text); } 
         if (textBox2.Text == "") { F = 0; } else { F = int.Parse(textBox2.Text); } 
         Numbers Y = CheckIfThereIsNumber(S, new int[] { E, F }); 
         if (Y == Numbers.NotFound) 
         { 
          textBox3.Text = S.ToString(); 
         } 
         break; 
       } 
      } 
     } 

     Numbers CheckIfThereIsNumber(int _searchednumber, int[] _numbers) 
     { 
      Numbers Result = Numbers.NotFound; 
      for (int i = 0; i < _numbers.Length; i++) 
      { 
       if (_numbers[i] == _searchednumber) 
       { 
        Result = Numbers.Found_Number; 
       } 
      } 
      return Result; 
     } 
    } 
} 
+2

コードの書式設定の問題を追加せずに、このサイトの優先言語にないコードを見てみるのは難しいです。コードを整理してください。 – itsme86

+0

そうですね。 –

+0

ようこそStackOverflowへ。 itsme86のコメントとは対照的に、ここには優先言語はありません。コンピュータがそれを話す場合、コミュニティは、あなたの質問に適切なタグを付けるだけです。 – JamesFaix

答えて

2

適切な方法は、数字自体をランダム化しないように、しかし、リストからその番号必要になります未使用の番号とシャッフルのリストを作ることであろう取る。なぜあなたは、まったくここに乱数を使用している

List<int> notUsed = findUnusedNumbers(); 

while (notUsed.Count) { 
    int randomIndex = X.Next(0, notUsed.Count); 
    int myChosenNumber = notUsed.get(randomIndex); 
    // do something with the number here 
    notUsed.RemoveAt(randomIndex); 
} 
+0

問題は、プログラミングの初心者の学校で、ListとRemoveAtを学ぶことができませんでした。 –

+0

@TheNoahie インデックスをランダム化した後、ループでそのインデックスを持たない新しい配列を作成します。 しかし、たぶん学習リストが少し速いのは悪い考えではありません:) – Ritave

+0

私は他の方法を見つけましたが、それほど効率的ではありませんので、リストを覚えようとします(私はそれを10回実行するために別のものを使用しました) –

0

これまでに数独ソルバーをやったことがありますが、乱数はまったくありません。可能性を反復し、無作為に選んではいけません。

リスト操作を教えていないと言われているので、乱数を使用する必要がある場合は、有効なものが得られるまで試してください。

関連する問題