2011-02-05 4 views
6

Cela fonctionne parfaitement ... mais quand j'utilise foreach au lieu de for cela ne fonctionne pas. Je ne peux pas comprendre for et foreach sont mêmes.Plus grand et plus petit nombre dans un tableau

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

Montrez-nous le code de foreach que vous avez essayé et n'a pas fonctionné. vous faites probablement quelque chose de mal –

+0

Cela ne fonctionne pas à cause de la façon dont vous écrivez vos questions. : P (Ok, il a été édité, mon commentaire n'a plus de sens) –

+0

Je suis curieux de savoir pourquoi vous dites 'int larger = array [9];'. Pourquoi ne pas prendre le premier élément par défaut? –

Répondre

25

Pourquoi n'utilisez-vous pas cela?

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

Ça sent le devoir. Son professeur n'y est probablement pas encore allé. –

+0

S'il s'agit de devoirs, il est susceptible d'essayer de mettre en œuvre la méthode lui-même plutôt que d'en utiliser un intégré (et peut-être trouver les invariants de boucle). –

+0

+ 1 si vous me dites où je peux trouver Max(): p, il ne semble pas être dans System.Array, j'utilise un long [] –

2

Vous (normalement) ne pouvez pas modifier la collection que vous itérez lors de l'utilisation de foreach.

Bien que for et foreach semblent être similaires du point de vue du développeur, ils sont assez différents d'une perspective de mise en œuvre.

Foreach utilise un Iterator pour accéder aux objets individuels tandis que for ne sait pas (ou se soucie) de la séquence d'objets sous-jacente.

8

Si vous devez utiliser foreach (pour une raison quelconque) et ne veulent pas utiliser les fonctions de Bult-in, voici un extrait de code:

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

Pourquoi ce code ne fonctionne-t-il pas pour moi? – tandem

+0

toutes les lignes de code doivent être indentées (au moins) 4 espaces pour que le formateur fonctionne. En outre, ils doivent être séparés du texte environnant (le cas échéant) par une ligne vide. –

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

De cette façon, vous pouvez avoir le plus petit et le plus grand nombre dans une seule boucle.

+0

Il n'y a aucune exigence pour les variables temporaires, puis de nouveau l'affecter au tableau. –

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

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire expliquant pourquoi et/ou comment ce code répond à la question améliore sa valeur à long terme. – 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

Voici le programme complet ci-dessous donne `

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

Il est longtemps. Peut-être comme ceci:

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; 
    } 
Questions connexes