2015-04-21 4 views
-3

Я хочу сгенерировать идентификатор пользователя начиная с 1000, увеличивая на единицу для каждого пользователя (1000, 1001, 1002 и т. Д.). Похоже, что ни одно место для семенной случайной инструкции не засевает ее ... (либо в конструкторе, либо в основном). Почему моя случайная заявка не инициализируется с 1000 семян правильно в следующем коде?случайная проблема посева и, вероятно, проблема с конструктором

public class Student 
{ 
    public string FullName { get; set; } 
    public int StudentID { get; set; } 

    //constructor to initialize FullName and StudentID 
    public Student(string name, int ID) 
    { 
     FullName = name; 
     Random rnd = new Random(); 
     StudentID = rnd.Next(1000, 1050); // creates a number greater than 1000 
     return; 
    } 
    public override string ToString() 
    { 
     return string.Format("ID: {0}\n Name: {1}", StudentID, FullName); 
    } 
} 

public class StudentTest 
{ 
    static void Main(string[] args) 
    { 
     Student student1 = new Student("Amy Lee", 1000); 
     Student student2 = new Student("John Williams", 1001); 
     Console.WriteLine(student1); 
     Console.WriteLine(student2); 
     Console.WriteLine("\nPress any key to exit program"); 
     Console.ReadKey(); 
    } 
} 
+4

Все, что вы делаете настройки 'свойство StudentID' случайного значения между 1000 и 1050 с использованием экземпляра Random, который посеянный в текущее время (поведение конструктора по умолчанию). Конструктор принимает параметр «ID», но вы ничего не делаете с ним. Мне непонятно, каковы ваши ожидания. – vcsjones

ответ

0

Я хочу, чтобы создать идентификатор пользователя, начиная с 1000, приращения на единицу для каждого пользователя (1000, 1001, 1002 и т.д.).

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

Учитывая ваш пример кода, где вы (1) не используют потоки, (2) не использует базу данных (3), а не сохранения созданных Student экземпляров, самый простой способ добиться того, что вы хотите следующее:

public class Student 
{ 
    private static int _curID = 1000; 

    public static int GenerateNextID() 
    { 
     var id = _curID; 
     _curID++; 
     return id; 
    } 

    public string FullName { get; set; } 
    public int StudentID { get; private set; } 

    //constructor to initialize FullName and StudentID 
    public Student(string name, int ID) 
    { 
     FullName = name; 
     StudentID = ID; 
    } 
    public override string ToString() 
    { 
     return string.Format("ID: {0}\n Name: {1}", StudentID, FullName); 
    } 
} 

и использовать это нравится:

public class StudentTest 
{ 
    static void Main(string[] args) 
    { 
     Student student1 = new Student("Amy Lee", Student.GenerateNextID()); 
     Student student2 = new Student("John Williams", Student.GenerateNextID()); 
     Console.WriteLine(student1); 
     Console.WriteLine(student2); 
     Console.WriteLine("\nPress any key to exit program"); 
     Console.ReadKey(); 
    } 
} 
2

Random генерирует случайные числа, а не последовательные.

Объявление переменной int и приращивание ее для каждого StudentID.

public class Student 
{ 
    public string FullName { get; set; } 
    public int StudentID { get; set; } 
    private static int _currentId = 1000; 

    public Student(string name) 
    { 
     FullName = name; 
     StudentID = _currentId++; 
     return; 
    } 
    public override string ToString() 
    { 
     return string.Format("ID: {0}\n Name: {1}", StudentID, FullName); 
    } 
} 
Смежные вопросы