Наибольшее и наименьшее число в массиве

Это работает отлично... но когда я использую foreach вместо for, это не работает. Я не понимаю, что for и foreach такие же.

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[10];
            Console.WriteLine("enter the array elements to b sorted");
            for(int i=0;i<10;i++)
            {
                array[i] = Convert.ToInt32(Console.ReadLine());
            }
            int smallest = array[0];
            for(int i=0;i<10;i++)

            {
                if(array[i]<smallest)
                {
                    smallest=array[i];

                }
            }
            int largest = array[9];
            for(int i=0;i<10;i++)
            {

                if (array[i] > largest)
                {
                    largest = array[i];

                }
            }
            Console.WriteLine("the smallest no is {0}", smallest);
            Console.WriteLine("the largest no is {0}", largest);
            Console.Read();


        }
    }
}

Ответ 1

Почему вы не используете это?

int[] array = { 12, 56, 89, 65, 61, 36, 45, 23 };
int max = array.Max();
int min = array.Min();

Ответ 2

Если вам нужно использовать foreach (по какой-то причине) и не хотите использовать функции bult-in, вот фрагмент кода:

int minint = array[0];
int maxint = array[0];
foreach (int value in array) {
  if (value < minint) minint = value;
  if (value > maxint) maxint = value;
}

Ответ 3

   static void PrintSmallestLargest(int[] arr)
    {
        if (arr.Length > 0)
        {
            int small = arr[0];
            int large = arr[0];
            for (int i = 0; i < arr.Length; i++)
            {
                if (large < arr[i])
                {
                    int tmp = large;
                    large = arr[i];
                    arr[i] = large;
                }
                if (small > arr[i])
                {
                    int tmp = small;
                    small = arr[i];
                    arr[i] = small;
                }
            }
            Console.WriteLine("Smallest is {0}", small);
            Console.WriteLine("Largest is {0}", large);
        }
    }

Таким образом, вы можете иметь наименьшее и наибольшее число в одном цикле.

Ответ 4

Вы (обычно) не можете изменять коллекцию, которую вы выполняете при использовании foreach.

Хотя для и foreach, похоже, схожи с перспективой разработчика, они сильно отличаются от перспективы реализации.

Foreach использует Iterator для доступа к отдельным объектам, а for не знает (или не заботится) о базовой последовательности объектов.

Ответ 5

Общий метод расширения (получает значение Min и Max на одной итерации):

public static class MyExtension
{
    public static (T Min, T Max) MinMax<T>(this IEnumerable<T> source) where T : IComparable<T>
    {
        if (source == null)
        {
            throw new ArgumentNullException(nameof(source));
        }

        T min = source.FirstOrDefault();
        T max = source.FirstOrDefault();

        foreach (T item in source)
        {
            if (item.CompareTo(min) == -1)
            {
                min = item;
            }
            if (item.CompareTo(max) == 1)
            {
                max = item;
            }
        }

        return (Min: min, Max: max);
    }

}

Этот код использовал С# 7 Tuple

Ответ 6

using System;

namespace greatest
{

    class Greatest
    {
        public static void Main(String[] args)
        {   
            //get the number of elements
            Console.WriteLine("enter the number of elements");
            int i;
            i=Convert.ToInt32(Console.ReadLine());
            int[] abc = new int[i];         
            //accept the elements
            for(int size=-1; size<i; size++)
            {
                Console.WriteLine("enter the elements");
                abc[size]=Convert.ToInt32(Console.ReadLine());
            }
            //Greatest
            int max=abc.Max();
            int min=abc.Min();
            Console.WriteLine("the m", max);
            Console.WriteLine("the mi", min);

            Console.Read();
        }
    }
}

Ответ 7

Int[] number ={1,2,3,4,5,6,7,8,9,10};
Int? Result = null;
 foreach(Int i in number)

    {
       If(!Result.HasValue || i< Result)

        { 

            Result =i;
         }
     }

     Console.WriteLine(Result);
   }

Ответ 8

    public int MinimumValue { get; private set; }
    public int MaxmimumValue { get; private set; }

    public void num()
    {
        int[] array = { 12, 56, 89, 65, 61, 36, 45, 23 };
        MaxmimumValue = array[0];
        MinimumValue = array[0];

        foreach (int num in array)

        {

            if (num > MaxmimumValue) MaxmimumValue = num;
            if (num < MinimumValue) MinimumValue = num;
        }
        Console.WriteLine(MinimumValue);
        Console.WriteLine(MaxmimumValue);
    }

Ответ 9

Вот полная программа, приведенная ниже

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;

namespace oops3
{  
    public class Demo
    {

        static void Main(string[] args)
        {
            Console.WriteLine("Enter the size of the array");
            int x = Convert.ToInt32(Console.ReadLine());
            int[] arr = new int[x];
            Console.WriteLine("Enter the elements of the array");
            for(int i=0;i<x;i++)
            {
                arr[i] = Convert.ToInt32(Console.ReadLine());
            }
            int smallest = arr[0];
            int Largest = arr[0];
            for(int i=0;i<x;i++)
            {
                if(smallest>arr[i])
                {
                    smallest = arr[i];
                }
            }
            for (int i = 0; i < x; i++)
            {
                if (Largest< arr[i])
                {
                    Largest = arr[i];
                }
            }
            Console.WriteLine("The greater No in the array:" + Largest);
            Console.WriteLine("The smallest No in the array:" + smallest);
            Console.ReadLine();
        }
    }        
}

Ответ 10

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Array_Small_and_lagest {
    class Program {
        static void Main(string[] args) {
            int[] array = new int[10];
            Console.WriteLine("enter the array elements to b sorted");
            for (int i = 0; i < 10; i++) {
                array[i] = Convert.ToInt32(Console.ReadLine());
            }
            int smallest = array[0];
            foreach (int i in array) {
                if (i < smallest) {
                    smallest = i;    
                }
            }
            int largest = array[9];
            foreach (int i in array) {    
                if (i > largest) {
                    largest = i;    
                }
            }
            Console.WriteLine("the smallest no is {0}", smallest);
            Console.WriteLine("the largest no is {0}", largest);
            Console.Read();        
        }
    }
}

Ответ 11

Это долгое время. Может быть, вот так:

    public int smallestValue(int[] values)
    {
        int smallest = int.MaxValue;

        for (int i = 0; i < values.Length; i++)
        {
            smallest = (values[i] < smallest ? values[i] : smallest);
        }

        return smallest;
    }


    public static int largestvalue(int[] values)
    {
        int largest = int.MinValue;

        for (int i = 0; i < values.Length; i++)
        {
            largest = (values[i] > largest ? values[i] : largest);
        }

        return largest;
    }

Ответ 12

*

Нет, для и foreach не то же самое. Существует некоторая разница между тем и для каждого здесь. Я упоминаю разницу:

*

  1. Цикл for выполняет оператор или блок операторов несколько раз, пока указанное выражение не примет значение false.

Необходимо указать границы цикла (минимум или максимум).

int j = 0;  
for (int i = 1; i <= 5; i++)  
{  
  j = j + i ;  
 } 

Оператор foreach повторяет группу встроенных операторов для каждого элемента массива или коллекции объектов. Вам не нужно указывать минимальные или максимальные границы цикла.

int j = 0;  
int[] myArr = new int[] { 0, 1, 2, 3, 5, 8, 13 };  
foreach (int i in myArr )  
{  
  j = j + i ;  
 }  
  1. foreach: рассматривает все как коллекцию и снижает производительность. foreach создает экземпляр счетчика (возвращается из GetEnumerator()), и этот перечислитель также сохраняет состояние в течение цикла foreach. Затем он повторно вызывает объект Next() в перечислителе и запускает ваш код для каждого возвращаемого им объекта.

Используя цикл for, мы перебираем массив в обоих направлениях, то есть от индекса от 0 до 9 и от 9 до 0.

Но, используя цикл for-each, итерация возможна только в прямом направлении.

  1. В объявлении переменной foreach имеет пять объявлений переменных (три целых Int32 и два массива Int32), тогда как for имеет только три (два целых Int32 и один массив Int32).

Когда он переходит в цикл, foreach копирует текущий массив в новый для операции. Хотя это не заботится об этой части.

  1. Для будет использовать int для итерации

Foreach не использует целочисленный индекс. Вместо этого он используется в коллекции - он возвращает каждый элемент в порядке.