2014-11-20 2 views
0

도시에 대한 값을 입력 할 수있는 기본 날씨 응용 프로그램을 만들고 있는데 평균, 최저 기온 및 최고 기온이 표시됩니다.C# 배열이 올바르게 표시되지 않습니다.

5 행 (도시)과 4 열 (4 판독 값)의 2 차원 배열 (intTemps)을 만들었습니다. 목록 상자에 온도를 추가 할 때마다 항상 왼쪽 상단에 표시됩니다. 다른 온도를 추가하면 방금 표시된 온도와 현재 온도가 표시됩니다.

코드는 내 교수가 쓴 예제를 기반으로하므로 올바르게 표시되지 않는 이유는 확실하지 않습니다.

public partial class Form1 : Form 
{ 
    string[] strNames = { "Livonia", 
          "Redford" , 
          "Novi" , 
          "Westland", 
          "Northville" }; 
    int[,] intTemps = new int[5, 4]; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     for (int i = 0; i <= 4; i++) 
     { 
      cobNames.Items.Add(strNames[i]); 
      lstNames.Items.Add(strNames[i]); 
     } 
    } 

    private void btnAdd_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (cobNames.SelectedIndex >= 0 && cobNames.SelectedIndex <= 4) 
      { 
       if (intTemps[cobNames.SelectedIndex, (int)nudTemp.Value - 1] == 0) 
       { 
        intTemps[cobNames.SelectedIndex, (int)nudTemp.Value - 1] = Int32.Parse(txtTemp.Text); 
       } 
       else 
       { 
        MessageBoxButtons buttons = MessageBoxButtons.YesNo; 
        DialogResult result; 
        result = MessageBox.Show("Do you want to change temps?", "Temps already exist!", buttons); 
        if (result == System.Windows.Forms.DialogResult.Yes) 
        { 
         intTemps[cobNames.SelectedIndex, (int)nudTemp.Value - 1] = Int32.Parse(txtTemp.Text); 
        } 
       } 
       displayTemps(); 
      } 
      else 
      { 
       MessageBox.Show("You must select a valid name!"); 
      } 
     } 
     catch (FormatException) 
     { 
      MessageBox.Show("Temps must be integers"); 
     } 
    } 

    private void displayTemps() 
    { 
     string strLine; 
     lstTemp.Items.Clear(); 
     double[] dblAverages = new double[5]; 
     int intNonBlank = 0; 

     for (int l = 0; l <= 4; l++) 
     { 
      intNonBlank = 0; 
      for (int c = 0; c <= 3; c++) 
      { 
       if (intTemps[l, c] != 0) 
       { 
        dblAverages[l] += intTemps[l, c]; 
        intNonBlank++; 
       } 
      } 
      if (intNonBlank != 0) 
      { 
       dblAverages[l] /= intNonBlank; 
      } 
     } 
     for (int l = 0; l <= 4; l++) 
     {     
      strLine = " "; 
      for (int c = 0; c <= 3; c++) 
      { 
       if (intTemps[l, c] == 0) 
       { 
        strLine += "  "; 
       } 
       else 
       { 
        if (intTemps[l, c] == 120) 
        { 
         strLine += intTemps[l, c] + " "; 
        } 
        else 
        { 
         strLine += intTemps[l, c] + " "; 
        } 
        lstTemp.Items.Add(strLine); 
       } 
      } 
     } 
    } 
} 

답변

0

displayTemps() 절차를 다시 작성합니다. 이 wil은 lstTemp에 필요한 모든 정보를 추가합니다.

private void displayTemps() 
{ 
    string strLine; 
    lstTemp.Items.Clear(); 
    double[] dblAverages = new double[5]; 
    int intNonBlank = 0; 

    for (int l = 0; l <= 4; l++) 
    { 
     intNonBlank = 0; 
     for (int c = 0; c <= 3; c++) 
     { 
      if (intTemps[l, c] != 0) 
      { 
       dblAverages[l] += intTemps[l, c]; 
       intNonBlank++; 
      } 
     } 
     if (intNonBlank != 0) 
     { 
      dblAverages[l] /= intNonBlank; 
     } 
     int min_temp = System.Linq.Enumerable.Range(0, 4). 
      Select(i => intTemps[l, i]).Min(); 
     int max_temp = System.Linq.Enumerable.Range(0, 4). 
      Select(i => intTemps[l, i]).Max(); 
     lstTemp.Items.Add(
      "Average temp for city "+ l +": " + dblAverages[l] + " " + 
      "Minimum " + min_temp + " " + 
      "Maximum " + max_temp); 
    }   
} 
관련 문제