【发布时间】:2012-01-01 22:18:03
【问题描述】:
我创建了一个程序来计算不规则形状物体的表面积,例如湖。 我读入了一个文件,其中包含 x 和 y 值的值以及深度。
我是 C# 新手,所以我还没有完全理解所有内容,但我认为我的代码应该可以工作,但是,它似乎没有将区域的值写入屏幕。
我知道 Console.WriteLine(_surface); 应该可以工作,但我似乎无法让它做任何事情,而且它可能在错误的地方!
谁能告诉我哪里出错了?
我的代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using NUnit.Framework;
namespace ConsoleApplication1
{
public class ValueXyz
{
public double X { get; set; }
public double Y { get; set; }
public int Z { get; set; }
}
public class SurfaceCalculator
{
private ValueXyz[] _valuesXyz;
private double _surface;
private readonly string _textWithValues;
public SurfaceCalculator(string textWithValues)
{
_textWithValues = textWithValues;
SetValuesToCalculate();
}
public double Surface
{
get { return _surface; }
}
public void CalculateSurface()
{
for (var i = 0; i < _valuesXyz.Length; i++)
{
if (_valuesXyz[i].Z == 0)
_surface = (_valuesXyz[i].X * _valuesXyz[i + 1].Y) - (_valuesXyz[i + 1].X * _valuesXyz[i].Y);
Console.WriteLine(_surface);
}
}
private void SetValuesToCalculate()
{
var valuesXyz = _textWithValues.Split(' ');
_valuesXyz = valuesXyz.Select(item => new ValueXyz
{
X = Convert.ToDouble(item.Split(',')[0]),
Y = Convert.ToDouble(item.Split(',')[1]),
Z = Convert.ToInt32(item.Split(',')[2])
}).ToArray();
}
public void TestSurfaceCalculatorGetsAValue()
{
var textWithValues = File.ReadAllLines(@"C:\Users\user\Documents\Visual Studio 2010\Projects\Lake_Take_Toooooo\Lake_Take_Toooooo\bin\Debug\Lake_Test.csv");
var calculator = new SurfaceCalculator(_textWithValues);
calculator.CalculateSurface();
Assert.IsNotNull(calculator.Surface);
}
static void Main()
{
Console.ReadKey();
}
}
}
这是我第一次使用类,如果有明显的答案,请道歉。
感谢您的帮助!
【问题讨论】:
-
在您的 Main 方法中,您永远不会调用任何其他方法。
-
这个以及其他一百万个初学者错误可以通过调试来解决。非常重要和有用的技能。只需在 Visual Studio 中按 F10,您就可以在执行时单步执行每一行代码
-
请注意,您的公式很奇怪(我什至会假装它是错误的)并且肯定会因数组越界异常而失败。
-
@Kieren,虽然我同意知道使用调试器是一项重要技能,但应该尽量少调试。甚至(或尤其是)初学者也应该被告知如何为此类任务进行单元测试。您在调试器中花费的每一分钟都是非生产时间。
-
..如果他们的单元测试失败了?创建更细粒度的单元测试,直到每个测试都有一条 IL 指令?单元测试有时间和地点,但这不是。特别是对于初学者来说,单步调试、观察变量变化和调用堆栈对于了解事物如何组合在一起绝对是无价的。比单元测试 IMO 更重要。 [从实际意义上扩展它,迭代地修改单元测试、重建解决方案和读取单元测试输出是解决许多问题的糟糕方式。只需按 F10 看看发生了什么。]