2014-03-29 34 views
0

我正在創建一個隨機熱量從-10到50°C的天氣計劃。我有它的工作,但我需要找到特定的日子裏有霜(0; -1,-5等...)。我有一個有多少霜天的櫃檯,但我似乎無法找到如何獲得這些特定的日子並將它們打印在屏幕上。這裏是我的代碼:C#天氣計劃,如何檢索循環中的具體值

Random x = new Random(); 
int day = 1; 
int frostDays = 0; 
double sum = 0; 
int[] days = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100}; 

int[] heat = new int[100]; 

for (int i = 1; i <= 100; i++) 
{ 
    heat[0] = x.Next(-10, 51); 

    if (heat[0] < 0) 
    { 
     //Console.WriteLine("Day number " + day + " heat " + heat[0]); 
     frostDays++; 
    } 
    Console.Write(heat[0] + " ** "); 
    if (days.Contains(day)) 
    { 
     Console.WriteLine("\n"); 
    } 
    //Console.WriteLine("Heat day " + day + ". is: " + heat[0]); 

    sum += heat[0]; 
    day++; 
} 

double average = sum/100; 

Console.WriteLine("Heat sum: " + sum); 
Console.WriteLine("average heat: " + average.ToString("F2") + " °C"); 
Console.WriteLine("frost days: " + frostDays); 

OUTPUT:http://oi57.tinypic.com/mw4myv.jpg

我想用自己的熱量檢索特定的天數(天數),這是霜凍(低於0℃),並打印在屏幕上,我似乎無法找出如何,如果有人可以幫助,請回答,非常感謝。

+0

請包括輸出*文本*。你有一個基於文本的程序 - 沒有理由有輸出圖像。 –

+0

另外,你的'heat'數組意味着什麼?你只會使用'heat [0]',這對我來說不太合適...... –

+0

熱陣列意味着代表特定日子的熱度。 – Realitiez

回答

1

我建議你改變你的結構,以更面向對象的方法。

您應該創建一個Day對象,其中將包含:

  • 當天的溫度
  • 如果一天有霜凍

這可以在一個小班表示:

public class Day 
{ 
    public int Temperature { get; set; } 
    public bool Frost { get { return Temperature < 0; } } 

    public Day(int temperature) 
    { 
     Temperature = temperature; 
    } 
} 

既然你有東西給存儲您的數據,您需要在程序的邏輯上工作。 (這不算犯法,是不是很良好的結構)

開始通過給你的程序了幾個變量:

private const totalDays = 100; //Replace your hardcoded "100"s with this 
private const int minTemp = -10; //Pretty self explanitory, the min and max temperatures for a day to generate 
private const int maxTemp = 50; 

因爲你的問題指出你正在尋找霜凍天,我要修改你的邏輯只打印它們。另外請注意,您通過使用heat[0]錯誤地訪問您的陣列,它總是會獲得0位置上的第一個元素,當您應該使用heat[i]獲取第i位置的值時。

的代碼應該如下:

for (int i = 0; i < totalDays; i++) 
{ 
    days[i] = new Day(x.Next(minTemp, maxTemp + 1)); //Create a day with random temperature 
    if (days[i].Frost) //The "Frost" propery returns true if the "Temperature" is below 0 
    { 
     Console.WriteLine("Day {0} is frosty!", i); 
    } 
} 

注意我是如何修改你的for循環在0開始,而不是1,因爲這是陣列的開始。我還更改了x.Next以將新的minTempmaxTemp值考慮在內。


如果你想獲得和處理只是霜的項目,你可以通過它們只是循環,並檢查是否有Day小號Frost屬性爲true。

所以要回顧一下,你的代碼應該是這樣的:

class Program 
{ 
    private const int totalDays = 100; 
    private const int minTemp = -10; 
    private const int maxTemp = 50; 
    private static Day[] days = new Day[totalDays]; 
    private static Random x = new Random(); 

    static void Main(string[] args) 
    { 
     double sum = 0; 

     for (int i = 0; i < totalDays; i++) 
     { 
      days[i] = new Day(x.Next(minTemp, maxTemp + 1)); //Create a day with random temperature 
      sum += days[i].Temperature; 
      Console.WriteLine("Day {0} is {1} degrees and is{2} frosty", i, days[i].Temperature, days[i].Frost ? string.Empty : " not"); 
     } 

     double average = sum/totalDays; 

     Console.WriteLine("Total Temperature: {0} °C", sum); 
     Console.WriteLine("Average Temperature {0} °C", average.ToString("F2")); 

     for (int i = 0; i < totalDays; i++) 
     { 
      if (days[i].Frost) 
      { 
       //Do something 
      } 
     } 

     Console.ReadLine(); 
    } 
} 
public class Day 
{ 
    public int Temperature { get; set; } 
    public bool Frost { get { return Temperature < 0; } } 

    public Day(int temperature) 
    { 
     Temperature = temperature; 
    } 
} 
+0

非常感謝!這正是我所尋找的,我對此很感興趣,所以感謝您的幫助。 – Realitiez

+0

@Realitiez沒問題! – Cyral