2014-10-18 2 views
0

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

static void Main(string[] args) 
    { 
     int Seed = 0;    
     int[] random = new int[10]; 
     int[] input = new int[10]; 

     for (int x = 0; x < random.Length; x++) 
     { 
      Seed = (int)DateTime.Now.TimeOfDay.Ticks; 
      random[x] = getRnd(Seed);     
     }      
     for (int x = 0; x < input.Length; x++) 
     { 
      Console.Write("Enter an integer number between 1 and 100: "); 
      input[x] = Convert.ToInt32(Console.ReadLine());    
     } 

     int inputnumber=input[0]; 
     for (int x = 0; x < input.Length; x++) 

      if (inputnumber <= random[x]) 
      { 
       Console.WriteLine("The entered number " + inputnumber + " is less than " + random[x]); 
      } 
      else if (inputnumber >= random[x]) 
      { 
       Console.WriteLine("The entered number " + inputnumber + " is greater than " + random[x]); 
      } 
      else if (inputnumber == random[x]) 
      { 
       Console.WriteLine("The entered number " + inputnumber + " is equal to " + random[x]); 
      } 

    }     
     static int getRnd(int Seed) 
     { 
      Random myrandomnum = new Random(Seed); 
      int randomvalue = myrandomnum.Next(1, 100); 
      return randomvalue; 
     } 
} 

}

мне нужно напечатать, как это.

Enter an integer number between 1 and 100: 1 
Enter an integer number between 1 and 100: 8 
Enter an integer number between 1 and 100: 44 
Enter an integer number between 1 and 100: 22 
Enter an integer number between 1 and 100: 16 
Enter an integer number between 1 and 100: 88 
Enter an integer number between 1 and 100: 41 
Enter an integer number between 1 and 100: 77 
Enter an integer number between 1 and 100: 10 
Enter an integer number between 1 and 100: 52 
The entered number 1 is less than 64 
The entered number 8 is less than 44 
The entered number 44 is less than 80 
The entered number 22 is less than 91 
The entered number 16 is less than 95 
The entered number 88 is greater than 39 
The entered number 41 is less than 79 
The entered number 77 is greater than 27 
The entered number 10 is less than 35 
The entered number 52 is less than 65 
Press any key to continue . . . 

Но я получаю это:

Enter an integer number between 1 and 100: 1 
    Enter an integer number between 1 and 100: 8 
    Enter an integer number between 1 and 100: 44 
    Enter an integer number between 1 and 100: 22 
    Enter an integer number between 1 and 100: 16 
    Enter an integer number between 1 and 100: 88 
    Enter an integer number between 1 and 100: 41 
    Enter an integer number between 1 and 100: 77 
    Enter an integer number between 1 and 100: 10 
    Enter an integer number between 1 and 100: 52 
    The entered number 1 is less than 64 
    The entered number 1 is less than 64 
    The entered number 1 is less than 64  
    The entered number 1 is less than 64 
    The entered number 1 is less than 64 
    The entered number 1 is less than 64 
    The entered number 1 is less than 64 
    The entered number 1 is less than 64 
    The entered number 1 is less than 64 
    The entered number 1 is less than 64 
    Press any key to continue . . . 
+1

Вы назначаете значение 'inputnumber' вне вашего тела цикла, поэтому оно принимает только значение элемента в индексе' 0'. Вам нужно индексировать свой массив 'input' так же, как вы индексируете свой массив' random'. –

+0

Это * не * дубликат заданного вопроса, потому что используется конструктор 'Random()'. Это * явно *, указывающее одно и то же семя каждый раз. –

ответ

0

Там это две проблемы.

Первая проблема заключается в getRnd(). На каждой итерации цикла вы передаете новое семя, но цикл выполняется так быстро, что, вероятно, количество Ticks будет одинаковым на каждой итерации.Вы можете это исправить, перемещая высев вне цикла, и передавая Random генератор в качестве параметра функции getRnd():

Seed = (int)DateTime.Now.TimeOfDay.Ticks; 
Random rand = new Random(Seed); 
for (int x = 0; x < random.Length; x++) 
{ 
    random[x] = getRnd(rand);     
} 

Вторая проблема заключается в цикле. На этой линии:

int inputnumber=input[0]; 

присваивается значение в input[0]inputnumber к. Однако вы никогда не меняете его на будущие итерации цикла. Вы можете исправить это путем перебора input[] на каждой итерации цикла, то есть:

for (int x = 0; x < input.Length; x++) 
{  
    if (input[x] <= random[x]) 
    { 
     Console.WriteLine("The entered number " + input[x] + " is less than " + random[x]); 
    } 
    else if (input[x] >= random[x]) 
    { 
     Console.WriteLine("The entered number " + input[x] + " is greater than " + random[x]); 
    } 
    else if (input[x] == random[x]) 
    { 
     Console.WriteLine("The entered number " + input[x] + " is equal to " + random[x]); 
    } 
} 
2

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

Для случайных чисел части, вот проблема:

Seed = (int)DateTime.Now.TimeOfDay.Ticks; 
random[x] = getRnd(Seed); 
... 
static int getRnd(int Seed) 
{ 
    Random myrandomnum = new Random(Seed); 

Если не DateTime.Now.TimeOfDay.Ticks изменений между итерациями - что очень маловероятно, так как разрешение системных часов, как правило, в порядке миллисекунд, и вы не делая много работы между итерациями - вы создаете несколько экземпляров Random, все с одним и тем же семенем. Это означает, что вы получите одну и ту же последовательность случайных чисел из каждого экземпляра, но в любом случае вы просто запрашиваете только один номер из каждого экземпляра.

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

Random rng = new Random(); 
for (int x = 0; x < random.Length; x++) 
{ 
    random[x] = GenerateRandomValue(rng); 
} 
... 
static int GenerateRandomValue(Random random); 
{ 
    int randomvalue = random.Next(1, 100); 
    return randomvalue; 
} 

Конечно в этой точке вы можете рассмотреть удаление метод целиком, а с помощью:

Random rng = new Random(); 
for (int x = 0; x < random.Length; x++) 
{ 
    random[x] = random.Next(1, 100); 
} 

Вы могли бы также рассмотреть возможность использования random.Next(1, 100), если вы хотите, значение в диапазоне от 1 до 100 включительно - второй аргумент Random.Next - эксклюзивный верхний предел.

Обратите внимание, что этот подход к созданию одного экземпляра Random не очень хорошо работает в многопоточном сценарии, так как Random не является потокобезопасным. К счастью, это не проблема, но см. my article on Random для получения дополнительной информации, если вам это нужно позже.

Для задачи «только с помощью одного входного значения», ответ LaD1Da идет более подробно, но проблема в том, что inputNumber всегда input[0] ... вы никогда не используете input[1], input[2] и т.д.

1

У меня не хватает «репутации», чтобы просто добавить комментарий:

Вопрос заключается в том, что вы не измените inputnumber в ваш последний цикл. Вы всегда используете input[0]. Просто измените последнюю петлю на следующее:

for (int x = 0; x < input.Length; x++) 
    int inputnumber = input[x]; // This is new 
    if (inputnumber <= random[x]) 
    { 
     Console.WriteLine("The entered number " + inputnumber + " is less than " + random[x]); 
    } 
    else if (inputnumber >= random[x]) 
    { 
     Console.WriteLine("The entered number " + inputnumber + " is greater than " + random[x]); 
    } 
    else if (inputnumber == random[x]) 
    { 
     Console.WriteLine("The entered number " + inputnumber + " is equal to " + random[x]); 
    } 
} 

Edit: Кроме того у вас есть проблемы с вашей генерацией случайных чисел. Обратите внимание на ответ Джона Скита.

Смежные вопросы