2013-07-19 3 views
0

Ну, я пытаюсь найти maxValue в массиве и его более сложное, чем я чувствую. Обычно этот код работает. Если я объявляю массив и вручную помещаю в числа для массива, он найдет максимальное значение штрафа. Но когда я добавляю метод создания массива со случайными числами, он разбивается и возвращает последнее значение, установленное как максимальное.Поиск максимального значения в случайном массиве

static int MaxArray(int[] Array) 
{ 
    int maxVal = Array[0]; 
    for(int i = 0; i < Array.Length; i++) 
    { 
     if(Array[i] > maxVal) 
     { 
      maxVal = Array[i]; 
     } 
    }   
    return maxVal; 
} 
static void Main(string[] args) 
{ 
    Random r = new Random(); 
    int[] myArray = new int[5]; 
    for(int i = 0; i < myArray.Length; i++) 
    { 
     int rNumb = r.Next(0, 100); 
     for (int v = 0; v < myArray.Length; v++) 
     { 
      myArray[v] = rNumb; 
     } 
     Console.WriteLine(myArray[i]); 
    } 
    Console.WriteLine("Press entere to find the max value"); 
    Console.ReadKey();    
    Console.Write(MaxArray(myArray)); 
    Console.Read(); 
} 

ответ

1

Вы были перезапись значения с второй цикл,

for (int v = 0; v < myArray.Length; v++) 
    { 
     myArray[v] = rNumb; 
    } 

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

Попробуйте вместо этого:

static void Main(string[] args) 
    { 
     Random r = new Random(); 
     int[] myArray = new int[5]; 
     for (int i = 0; i < myArray.Length; i++) 
     { 
      myArray[i] = r.Next(0, 100); 

      Console.WriteLine(myArray[i]); 
     } 
     Console.WriteLine("Press entere to find the max value"); 
     Console.Write(MaxArray(myArray)); 
     Console.Read(); 
    } 

Но, если честно, что метод MaxArray бесполезно, не изобретать колесо, использовать Макс из LINQ вместо:

Console.Write(myArray.Max()); 
+0

Thankyou я не знаю, макс метод существует, потому что я изучаю C# прямо сейчас, и я не понял, что делаю неправильно – MikaAK

4

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

for(int i = 0; i < myArray.Length; i++) 
{ 
    int rNumb = r.Next(0, 100); 
    myArray[i] = rNumb; 
    Console.WriteLine(myArray[i]); 
} 
0

Это потому, что ваша инициализация массива совершенно бесполезно. Это то, что вы ищете:

for(int i = 0; i < myArray.Length; i++) 
{ 
    myArray[i] = r.Next(0, 100); 
    Console.WriteLine(myArray[i]); 
} 

В конце этого, массив будет выглядеть следующим образом (с кодом):

{n, n, n, n, n} 

где n последнее случайное число.

0

Этот цикл не нужен. Вы должны изменить этот

for (int v = 0; v < myArray.Length; v++) 
    { 
     myArray[v] = rNumb; 
    } 

с

myArray[i] = rNumb; 

При написании этого цикла вы перезаписаны все значения в массиве с последним значением.

0

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

Ваш Console.WriteLine(myArray[i]); дает вам ложное представление о том, какие значения массива вы передаете MaxValue() на самом деле!

1

Это легко достигается с помощью Linq.

using System.Linq; 

private static Random _random = new Random(); 
public static int[] GenerateRandomArray(int arrayLength) 
{ 
    return Enumerable.Range(0, arrayLength).Select(i => _random.Next(0, 100)).ToArray(); 
} 

public static int FindMaxValue(int[] array) 
{ 
    return array.Max(); 
} 
Смежные вопросы