2012-02-15 87 views
3

我正在研究一个将摄氏温度转换成华氏温度的应用程序,反之亦然。渲染出一张桌子

该应用程序包含字段和单选按钮。用户填入“开始温度”,“结束温度”和“迭代器”并选择从C到F或F到C的转换。

点击一个按钮之后,表格会呈现C温度,转换F中的温度(反之亦然)。我试图用while循环和for循环来完成它,但它不能正常工作。

我知道这是一个不必要的复杂的解决方案,我真的应该明白帮助创建一个更优雅的解决方案,即工作。

 var i = 0; 

     while (startTemp < endTemp) { 
      i += 1; 

      TableRow tRow = new TableRow(); 
      tRow.CssClass = (i % 2 == 0 ? "white" : "grey"); 
      tempTable.Rows.Add(tRow); 

      startTemp = startTemp + iterator; 
      if (startTemp < endTemp) { 
       for (int j = 0; j <= 1; j++) { 
        TableCell tCell = new TableCell(); 
        if ((j % 2) == 0) { 
         tCell.Text = startTemp.ToString(); 
        } 
        else { 
         if (tempType1 == "°C") { 
          convertedTemp = TemperatureConverter.CelsiusToFahrenheit(startTemp); 
         } 
         else { 
          convertedTemp = TemperatureConverter.FahrenheitToCelsius(startTemp); 
         } 
         tCell.Text = convertedTemp.ToString(); 
        } 
        tRow.Cells.Add(tCell); 
       } 
      } 

求购输出(迭代器= 2):

Ç--------------------˚F

39   102 
41   105 
43   109 
45   113 
47   116 
49   120 

编辑:该解决方案工作正常,除了一件事。如果我使用1作为开始温度,10作为结束温度和1作为迭代器,它停在9(不应该在10,因为它应该),我只是不明白为什么。

回答

3

您的解决方案是好的,但我能做的只有1环

TableRow tRow 
TableCell tCell 
for(int i = startTemp; i < endTemp; i += iterator) 
{ 
tRow = new TableRow(); 
tRow.CssClass = (i % 2 == 0 ? "white" : "grey"); 
tempTable.Rows.Add(tRow); 

tCell = new TableCell(); 
tCell.Text = i.ToString(); 
tRow.Cells.Add(tCell); 
tCell = new TableCell(); 

tCell.Text = convert(i); 

tRow.Cells.add(tCell); 
tempTable.Rows.Add(tRow); 

} 

你停在9,因为 在while循环的开头你做9 + = 1

,所以我= 10,则如果(10 < 10) 所以它停在那里

所以,如果你能做到(startTemp < = endTemp)

+0

非常感谢!你的解决方案确实比我的更优雅,并且工作得很好,接受它需要以我需要的方式改变。 :) – holyredbeard 2012-02-15 20:35:02

0

你拥有它的方式并不差。您也可以使用一个类来存储数据:

public class ConvertData 
{ 
    public decimal Celsius { get; set; } 

    public decimal Fahrenheit { get; set; } 
} 

取第一遍并创建ConvertData对象,将它们存储在集合中。然后,收集绑定到一个中继器,ListView控件等