C#產生固定範圍內不重複的亂數

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;

using System.Windows.Forms;

namespace 產生固定範圍內不重複的亂數

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

TextBox[] textArray = new TextBox[] { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6 };

int[] numArray = new int[6];

Random rnd = new Random();

for (int i = 0; i < 6; ++i)

{

int num = rnd.Next(1, 50);

while (!check(ref numArray, num, i))

num = rnd.Next(1, 50);

numArray[i] = num;

textArray[i].Text = num.ToString();

}

}

bool check(ref int[] arr, int num, int pos)

{

for (int i = 0; i < pos; ++i)

{

if (num == arr[i])

return false;

if (!checkBox1.Checked)

if (num == arr[i] - 1 || num == arr[i] + 1)

return false;

}

return true;

}

}

}

請問 如何再加入使用刪去法的方式 來產生結果..

或者 使用特定數值來產生亂數

已更新項目:

抱歉~~解釋不夠清楚

應該是說原本範圍是1 ~ 50

實際上是49個數字,那這個50也會出現嗎?我還想刪掉特定數字元件

比方說 我還要"15.25.37.42."不出現在產生的亂數中(隨時會更動新元件)

增加的

textBox1~10 語法要怎麼寫

2 個已更新項目:

指要刪掉的範圍元件 textBox11~20

J大的方式也能用,不過差別性在哪我不是很清楚,因為剛接觸C#不是很久還在練習例檔

可以請J大解釋.他們的差別性嗎?

2 個解答

評分
  • John
    Lv 7
    7 年前
    最佳解答

    private void btnDraw_Click(object sender, EventArgs e)

    {

    PopulateToTextBoxes();

    }

    private void PopulateToTextBoxes()

    {

    TextBox[] txtBoxes = new TextBox[] {textBox1, textBox2, textBox3, textBox4, textBox5, textBox6};

    int[] values = NumberGenerator();

    for (int i = 0; i < values.Length; i++)

    {

    txtBoxes[i].Text = Convert.ToString(values[i]);

    }

    }

    private int[] NumberGenerator()

    {

    const int number_size = 50, result_size = 6;

    int[] numbers = new int[number_size];

    int[] results = new int[result_size];

    // generate all numbers...

    for (int i = 0; i < number_size; i++)

    {

    numbers[i] = i + 1;

    }

    // numbers' position shuffling...

    Random rnd = new Random();

    for (int i = 0; i < number_size; i++)

    {

    int pos = rnd.Next(0, number_size - 1);

    int tmp = numbers[i];

    numbers[i] = numbers[pos];

    numbers[pos] = tmp;

    }

    Array.Copy(numbers, results, 6);

    return results;

    }

    2014-03-28 17:19:15 補充:

    我估咁可能好啲。

    Array.Copy(numbers, results, result_size);

    2014-03-29 07:07:49 補充:

    如果只有49個號碼,就將這個改為

    const int number_size = 49, result_size = 6;

    >textBox1~10 語法要怎麼寫

    只有textBox1 ~ 6 出現過,何來有 textBox7 ~ 10 呢?

    >可以請J大解釋.他們的差別性嗎?

    什麼差別?

    要刪除數字?我估已超出問題的原意。要多一點時間。二個主要程式都要從新寫過。重寫可能字數已經超額。用新定義出過條新問題啦。

    2014-03-29 07:48:25 補充:

    寫好了,但正如我料,字數所限不能發表。

    private int[] NumberGenerator(int[] excluded) {

    int number_size = 49, result_size = 6;

    number_size -= excluded.Length;

    for (int i = 0, j = 1; i < number_size; i++) {

    if (IsExcluded(excluded, j)) ++j;

    numbers[i] = j++;

    }

    ...

  • 匿名使用者
    7 年前

    下面的網址能回答你的問題

    ▶▶http://*****

還有問題?馬上發問,尋求解答。