2011-02-05 32 views
6

Esto funciona perfectamente ... pero cuando uso foreach en lugar de for esto no funciona. No puedo entender for y foreach son lo mismo.Número más grande y más pequeño en una matriz

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

Muéstranos el código foreach que probó y no funcionó. probablemente estés haciendo algo mal –

+0

Esto no funciona debido a la forma en que escribes tus preguntas. : P (Ok, ha sido editado, mi comentario ya no tiene sentido) –

+0

Tengo curiosidad por qué dices 'int largest = array [9];'. ¿Por qué no tomar el primer elemento de forma predeterminada? –

Respuesta

25

¿Por qué no usa esto?

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

Huele a tarea. Su maestro probablemente no fue allí todavía. –

+0

Si es una tarea, es probable que intente implementar el método por sí mismo en lugar de usar uno integrado (y quizás encontrar las invariantes del ciclo). –

+0

+1 si me dices dónde puedo encontrar Max(): p, no parece estar en System.Array, estoy usando un largo [] –

2

Usted (normalmente) no puede modificar la colección que está iterando al utilizar foreach.

Aunque para y foreach parecen ser similares desde la perspectiva de un desarrollador, son bastante diferentes desde una perspectiva de implementación.

Foreach utiliza un Iterator para acceder a los objetos individuales, mientras que for no sabe (ni le importa) la secuencia de objetos subyacente.

8

Si es necesario utilizar foreach (por alguna razón) y no desea utilizar las funciones de Bult-en, aquí es un fragmento de código:

int minint = array[0]; 
int maxint = array[0]; 
foreach (int value in array) { 
    if (value < minint) minint = value; 
    if (value > maxint) maxint = value; 
} 
1
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(); 
     } 
    } 
} 
+0

¿Por qué este código no funciona para mí? – tandem

+0

todas las líneas de código deben estar indentadas (al menos) 4 espacios para que el formateador funcione. También deben separarse del texto circundante (si existe) con una línea en blanco. –

4
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); 
     } 
    } 

esta manera se puede tener el número más pequeño y más grande en un solo bucle.

+0

No hay ningún requisito para las variables temporales y luego asignarlas nuevamente a la matriz. –

0
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); 
    } 
+1

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y/o cómo responde este código a la pregunta mejora su valor a largo plazo. – Bono

0
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); 
    } 
0

Aquí está el programa completo dar continuación `

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(); 

     } 

    } 












     } 
0
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();   
     } 
    } 
} 
0

Es mucho tiempo. Tal vez así:

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; 
    } 
Cuestiones relacionadas