У вас может быть библиотека JAR, скомпилированная в Java 7, и у вас есть только Java 6 как Java Runtime. Это может случиться с некоторыми новыми библиотеками.
Проверьте каждый номер, который вы генерируете, на предыдущие цифры:
List<int> listNumbers = new List<int>();
int number;
for (int i = 0; i < 6; i++)
{
do {
number = rand.Next(1, 49);
} while (listNumbers.Contains(number));
listNumbers.Add(number);
}
Другой подход заключается в создании списка возможных номеров и удалении номеров, которые вы выбираете из списка:
List<int> possible = Enumerable.Range(1, 48).ToList();
List<int> listNumbers = new List<int>();
for (int i = 0; i < 6; i++)
{
int index = rand.Next(0, possible.Count);
listNumbers.Add(possible[index]);
possible.RemoveAt(index);
}
Что вы делаете, так это генерировать случайное число каждый раз в цикле. Конечно, есть вероятность, что следующее случайное число может быть таким же, как и предыдущее. Просто добавьте одну проверку, что текущее случайное число отсутствует в последовательности. Вы можете использовать цикл while: while (currentRandom not in listNumbers): generateNewRandomNumber
Вместо использования списка вы должны использовать HashSet. HashSet & lt;> запрещает несколько одинаковых значений. И метод Add возвращает bool, который указывает, был ли элемент добавлен в список. Ниже приведен пример кода ниже.
public static IEnumerable<int> GetRandomNumbers(int count)
{
HashSet<int> randomNumbers = new HashSet<int>();
for (int i = 0; i < count; i++)
while (!randomNumbers.Add(random.Next()));
return randomNumbers;
}
Сделайте цикл while и добавьте целые числа в хешсет. Остановите цикл, когда у вас шесть целых чисел.
Вставьте ниже в классе новый метод
public int randomNumber()
{
var random = new Random();
int randomNumber = random.Next(10000, 99999);
return randomNumber;
}
И используйте ниже в любом месте тестов, где необходимо
var RandNum = random1umber ();
driver.FindElement (By.CssSelector ("[class = 'test']")) SendKeys (RandNum);
Наилучший подход (по времени процессора) для таких задач - создание массива всех возможных чисел и извлечение из него 6 элементов при удалении элемента, который вы только что взяли из массива. Пример:
const int min = 1, max = 49;
List<int> listNumbers = new List<int>();
int[] numbers = new int[max - min + 1];
int i, len = max - min + 1, number;
for (i = min; i < max; i++) numbers[i - min] = i;
for (i = 0; i < 6; i++) {
number = rand.Next(0, len - 1);
listNumbers.Add(numbers[number]);
if (number != (len - 1)) numbers[number] = numbers[len - 1];
len--;
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int[] que = new int[6];
int x, y, z;
Random ran = new Random();
for ( x = 0; x < 6; x++)
{
que[x] = ran.Next(1,49);
for (y = x; y >= 0; y--)
{
if (x == y)
{
continue;
}
if (que[x] == que[y])
{
que[x] = ran.Next(1,49);
y = x;
}
}
}
listBox1.Items.Clear();
for (z = 0; z < 6**strong text**; z++)
{
listBox1.Items.Add(que[z].ToString());
}
}
}
Создайте HashSet и создайте уникальные случайные числа
public List<int> GetRandomNumber(int from,int to,int numberOfElement)
{
var random = new Random();
HashSet<int> numbers = new HashSet<int>();
while (numbers.Count < numberOfElement)
{
numbers.Add(random.Next(from, to));
}
return numbers.ToList();
}
listNumbers.AddRange(Enumerable.Range(1, 48)
.OrderBy(i => rand.Next())
.Take(6))
Я включил цикл for с циклом do ... while и установил условие остановки в списке меньше, чем 6. Это может быть не лучшее решение, но оно ближе всего к вашему исходному коду.
List<int> listNumbers = new List<int>();
do
{
int numbers = rand.Next(1,49);
if(!listNumbers.Contains(number)) {
listNumbers.Add(numbers);
}
} while (listNumbers.Count < 6)