Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Почему "случайное" число одно и то же?


Автор: slavaentp 7.1.2009, 20:13
Создал проект, стандартная Windows Forms.

Сделал textbox, кнопку и два label.

Компьютер загадывает число, надо угадать, какое именно.

Когда жмёшь на кнопку - он сравнивает введённое значение с "загаданным" и пишет, верно угадано или нет.

Проблема: при каждом запуске всё время "загадывается" одно и то же число. Почему?

Вот какой Form1.cs

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        System.Random r = new Random();
        private int zagadannoe_chislo;
        private int diapazon;        
        public Form1()
        {
            diapazon = 1;

            InitializeComponent();
            Zagadat_Chislo();
        }
        private void Zagadat_Chislo()
        {            
            zagadannoe_chislo = r.Next(diapazon);
            label2.Text = "Угадайте число от 0 до " + diapazon;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(textBox1.Text) == zagadannoe_chislo)
            {
                label1.Text = Convert.ToString("Верно!");
            }
            else
            {
                label1.Text = Convert.ToString("Неверно. Число было " + zagadannoe_chislo);
            }
        }
    }
}


Автор: kemiisto 7.1.2009, 20:57
Вопрос: сколько целых чисел лежит в диапазоне (0; 1] (или [0; 1) - таких тонксотей .NET'ого Random не знаю).
Ответ: одно. Либо 0, либо 1. По моим соображениям 1.

Автор: slavaentp 7.1.2009, 21:01
kemiisto

LOL, точноsmile)))) Спасибо.

Кстати, заодно можете сказать, почему в языках программирования счёт начинается с 0? Очень неудобно, путает. И насколько я знаю, программеры тоже предпочитают сохранять счёт с нуля, не меняют его.

Автор: Dims 7.1.2009, 21:10
Цитата(slavaentp @  7.1.2009,  21:01 Найти цитируемый пост)

Кстати, заодно можете сказать, почему в языках программирования счёт начинается с 0? Очень неудобно, путает.


В тех случаях, когда это используется в программировании, это часто оказывается удобней. Например, для вычисления адреса для двухмерного массива.

Не во всех языках так. Иначе, например, в Бейсике, Матлабе. По-моему, в Фортране, уже не помню.

Автор: Alekz 8.1.2009, 12:44
Цитата(slavaentp @ 7.1.2009,  21:01)
Кстати, заодно можете сказать, почему в языках программирования счёт начинается с 0? 

Это естественно с точки зрения железа.

Автор: Gaudi 20.1.2009, 14:23
Цитата(slavaentp @ 7.1.2009,  19:01)
Кстати, заодно можете сказать, почему в языках программирования счёт начинается с 0?

Для массивов - индексация с 0 означает, что 1-ый эл-нт находится по смещению 0 от начала массива.
Как понятнее
Код

*(p+n) = a[n]

или
Код

*(p+n) = a[n+1]

Автор: СорвиГолова 29.1.2009, 16:34
Цитата

Вопрос: сколько целых чисел лежит в диапазоне (0; 1] (или [0; 1) - таких тонксотей .NET'ого Random не знаю).
Ответ: одно. Либо 0, либо 1. По моим соображениям 1. 


Поправка - только 0

А вообще я использую перегруженную версию

Код

rnd.Next(minValue, maxValue);


Следует учитывать, что на самом деле учитывается промежуток [minvalue;maxValure),
то есть минимальное значение допустимо для результата.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)