2017-03-07 2 views
0

Je veux envoyer les variables temperature et windSpeed ​​à la méthode ComputeWindChill pour trouver le windchill. Remettez ensuite Windchill à la méthode Main pour afficher la température, la vitesse du vent et la température qui inclut le refroidissement éolien.Comment envoyer des variables de Main à une autre méthode, puis renvoyer une valeur à la méthode Main?

public class Program 
{ 

    public static void Main(string[] args) 
    { 

     Random rnd = new Random(); 

     int temperature = rnd.Next(0,50); 
     int windSpeed = rnd.Next(4,30); 

     Console.Write("Temperature: {0}", temperature); 
     Console.WriteLine(); 
     Console.Write("Wind Speed: {0}", windSpeed); 
     Console.WriteLine(); 
     Console.Write("Temperature (including windchill): {0}", ComputeWindChill.windChill); 

     ComputeWindChill(temperature); 
     ComputeWindChill(windSpeed); 
     } // end Main 

     public double ComputeWindChill(int temperature, int windSpeed, double windChill) 
     { 
       windChill = 35.74 + 0.6215 * temperature - 35.75 * Math.Pow(windSpeed,0.16) + 
        0.4275 * temperature * Math.Pow(windSpeed,0.16); 

     return windChill; 
    } 
} // end class 
+0

Quel est le problème avec votre code? Erreur? Des résultats inattendus? –

+1

'ComputeWindChill' renvoie une valeur mais vous ne la capturez pas. Il faut aussi 3 params (mais il semble qu'il ne devrait en avoir besoin que 2 puisque l'on est le résultat) le code ne passe que 1 – Plutonix

Répondre

0

Vous devez marquer ComputeWindChill comme étant statique. Sinon, vous ne pouvez pas l'utiliser. De plus, vous devez stocker quelque part le résultat de la méthode que vous appelez, puis l'utiliser. Comme votre code est, même il serait complété avec nos erreurs, vous appelez la méthode et vous n'utilisez pas le résultat. Last but not least la méthode 3 paramètres et attend que vous passez seulement 1.

+0

Et il nécessite 3 paramètres au lieu d'un seul. Et les valeurs de retour ne sont pas utilisées. Et.. –

+0

@SergeyBerezovskiy Je l'ai remarqué plus tard et je l'ai ajouté. Merci ! – Christos

0

Vous devez changer votre méthode pour cela:

public static double ComputeWindChill(int temperature, int windSpeed) 
{ 
    return 35.74 + 0.6215 * temperature - 35.75 * Math.Pow(windSpeed,0.16) + 
     0.4275 * temperature * Math.Pow(windSpeed,0.16); 
} 

Ceci accepte 2 paramètres (température et vitesse du vent) et renvoyait un double avec tous les calculs. Vous devriez également remarquer que la méthode doit être déclarée comme static parce que vous appelez d'une autre méthode statique (main)

L'appel devrait être comme ceci:

double windChill=ComputeWindChill(temperature,windSpeed); 
Console.Write("Temperature (including windchill): {0}", windChill); 

Une autre alternative est d'utiliser out paramètres. Dans ce cas, au lieu de la méthode « retour » d'une valeur, ce qu'il fait est le réglage de la valeur de la variable passée en out paramètre:

public void ComputeWindChill(int temperature, int windSpeed, out double windChill) 
{ 
    windChill= 35.74 + 0.6215 * temperature - 35.75 * Math.Pow(windSpeed, 0.16) + 
      0.4275 * temperature * Math.Pow(windSpeed, 0.16); 
} 

Notez que le paramenter void de retour, et le mot-clé out dans le troisième paramètre .

L'appel à cette méthode est un peu différent:

double windChill; 
ComputeWindChill(temperature, windSpeed,out windChill); 
Console.Write("Temperature (including windchill): {0}", windChill); 
0
public static void Main(string[] args) 
{ 

Random rnd = new Random(); 

int temperature = rnd.Next(0,50); 
int windSpeed = rnd.Next(4,30); 

Console.Write("Temperature: {0}", temperature); 
Console.WriteLine(); 
Console.Write("Wind Speed: {0}", windSpeed); 
Console.WriteLine(); 

//here you make a new double called windchill which will be equal to what your calculate windchill method returns 
double windChill = ComputeWindChill(temperature,windSpeed) 

Console.Write("Temperature (including windchill): {0}", windChill); 

} // end Main 

//I removed your third parameter called windchill here because you do not know it yet, you are calculating it and make this a static method(read up on static methods - very important) 
public static double ComputeWindChill(int temperature, int windSpeed) 
{ 
     double windChill = 35.74 + 0.6215 * temperature - 35.75 * Math.Pow(windSpeed,0.16) + 
     0.4275 * temperature *  Math.Pow(windSpeed,0.16); 

return windChill; 
} 

P.S. Je tape sur un téléphone

0

Vous devez d'abord comprendre comment définir une fonction. Par exemple, prenez votre fonction. Dans votre fonction, la température et la vitesse du vent sont les arguments que vous souhaitez envoyer à la fonction ComputeWindChill. Et vous avez besoin d'une double vitesse de retour de la fonction.

Alors vous définissez votre fonction

public static double ComputeWindChill(int temperature, int windSpeed) 
{ 
    return 35.74 + 0.6215 * temperature - 35.75 * Math.Pow(windSpeed,0.16) + 
    0.4275 * temperature * Math.Pow(windSpeed,0.16); 
} 

et tout en appelant la fonction ci-dessus, vous devez passer les arguments à la fonction, tout en même temps et stocker la valeur de rendement attendu de la fonction.

double windChill=ComputeWindChill(temperature,windSpeed); 
1

Vous pouvez utiliser "out" pour revenir valeur Windchill après avoir appelé la méthode

public class Program 
{ 
public static void Main(string[] args) 
{ 
Random rnd = new Random(); 
int temperature = rnd.Next(0,50); 
int windSpeed = rnd.Next(4,30); 

Console.Write("Temperature: {0}", temperature); 
Console.WriteLine(); 
Console.Write("Wind Speed: {0}", windSpeed); 
Console.WriteLine(); 

// Not sure what you are trying to do here? 
Console.Write("Temperature (including windchill): {0}",ComputeWindChill.windChill); 

double windChill=0; 

ComputeWindChill(temperature,windSpeed,windChill); 

ComputeWindChill(windSpeed); 
} // end Main 

public static double ComputeWindChill(int temperature,int windSpeed,out double windChill) 
{ 
     windChill = 35.74 + 0.6215 * temperature - 35.75 * Math.Pow(windSpeed,0.16) + 
      0.4275 * temperature * Math.Pow(windSpeed,0.16); 

return windChill; 
} 
}