程序2-2]按要求设计一个坐标类Point。主要包括:①两个私有字段表示两个坐标值(x坐标和y坐标)②一个带构造函数,可以对传入的x、y参数进行初始化③两个只读属性对坐标值可以进行读取④一个方法:求距离:求得当前坐标和另一个坐标之间的距离(提示:斜边=两直角边的平方和开方,Math类的Sqrt方法可以计算开方,Math.Sqrt(xx))写一个控制台程序,可以让用户输入两个坐标的值,然后求出两个坐标之间的距离。 用c#写一个
用户提到有四个主要部分:私有字段、带参数的构造函数、只读属性,以及求距离的方法。让我逐一分析。
首先,两个私有字段表示x和y坐标。这应该很简单,就是在类里声明private的double类型变量,比如private double x; private double y;。不过,用户要求它们是私有的,所以外部不能直接访问,只能通过属性来读取。
接下来是构造函数,需要接受x和y参数来初始化这两个字段。构造函数的写法应该是public Point(double x, double y),然后在里面把参数赋值给字段。这里需要注意的是,参数名和字段名相同,所以需要用this关键字来区分,比如this.x = x; this.y = y;。
然后是只读属性,用户要求这两个属性只能读取,不能设置。所以属性应该只有get访问器,没有set。在C#中,可以用public double X { get { return x; } }这样的写法,或者更简洁的自动属性,但自动属性需要set,所以这里还是得用传统的方式,因为字段是私有的,需要手动返回。
第四个部分是求距离的方法。这个方法需要接收另一个Point对象作为参数,然后计算两个点之间的距离。根据提示,斜边是两直角边平方和的开方。所以公式应该是Math.Sqrt((x2 - x1)^2 + (y2 - y1)^2)。这里要注意的是,平方可以用Math.Pow,或者直接相乘,比如(x2 - x1)*(x2 - x1)。可能后者效率更高,不过对于用户来说,两种方式都可以。然后调用Math.Sqrt来计算平方根。
接下来是控制台程序的部分。用户需要输入两个坐标的值,然后创建两个Point实例,调用求距离的方法。控制台输入的话,需要提示用户输入x1, y1, x2, y2四个值。这里需要注意的是,用户输入的是字符串,需要转换为double类型。所以要用double.Parse或者double.TryParse来处理。如果用户输入非数字,可能会出错,但用户可能没有要求处理异常,所以暂时用Parse,假设输入是正确的。
然后,创建两个Point对象,比如Point p1 = new Point(x1, y1); Point p2 = new Point(x2, y2); 然后调用p1的方法,传入p2,得到距离,再输出结果。
现在需要把代码结构整理出来。首先定义Point类,包含字段、构造函数、属性和方法。然后在Main函数中处理输入输出。
需要注意的细节:属性是只读的,所以只能用get;方法应该命名为GetDistance或者其他合适的名字,参数是另一个Point;输入的时候要按顺序输入x和y,可能需要提示用户先输入第一个点的x,再y,然后是第二个点的x和y。
可能的错误点:构造函数是否正确初始化字段;属性是否正确返回字段的值;距离计算是否正确,比如是否用了对方的x和y;输入转换是否正确。
测试一下,假设用户输入0,0和3,4,距离应该是5。或者1,2和4,6,距离是5。这样可以验证代码是否正确。
现在,把这些思路转化为代码。先写Point类,再写控制台程序的结构。确保每个部分都符合用户的要求,比如私有字段、构造函数、只读属性、方法计算距离。
最后,检查是否所有步骤都完成,语法是否正确,特别是LaTeX格式的要求,但用户这里可能不需要数学公式,只是代码。不过用户提到程序2-2,可能需要注意命名规范,比如类名和方法名的大小写。
总结,代码结构应该是:
- Point类,包含私有字段x和y。
- 构造函数初始化x和y。
- 只读属性X和Y。
- GetDistance方法,参数是Point类型,返回距离。
- Main函数中读取四个double值,创建两个Point实例,调用GetDistance并输出结果。以下是根据要求实现的C#坐标类及控制台程序:
using System;
public class Point
{
// ① 定义两个私有字段
private double x;
private double y;
// ② 带参数的构造函数
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
// ③ 定义只读属性
public double X { get { return x; } }
public double Y { get { return y; } }
// ④ 计算与另一个点的距离的方法
public double GetDistance(Point other)
{
double deltaX = other.X - this.X;
double deltaY = other.Y - this.Y;
return Math.Sqrt(deltaX * deltaX + deltaY * deltaY);
}
}
class Program
{
static void Main()
{
Console.WriteLine("请输入第一个点的坐标:");
Console.Write("x1 = ");
double x1 = double.Parse(Console.ReadLine());
Console.Write("y1 = ");
double y1 = double.Parse(Console.ReadLine());
Console.WriteLine("\n请输入第二个点的坐标:");
Console.Write("x2 = ");
double x2 = double.Parse(Console.ReadLine());
Console.Write("y2 = ");
double y2 = double.Parse(Console.ReadLine());
// 创建两个点对象
Point p1 = new Point(x1, y1);
Point p2 = new Point(x2, y2);
// 计算并输出距离
double distance = p1.GetDistance(p2);
Console.WriteLine($"\n两点之间的距离为:{distance:F2}");
}
}
代码结构说明:
Point类实现:
- 使用
private double
定义私有字段x
和y
- 通过构造函数进行初始化
- 通过只读属性
X
和Y
暴露字段值 GetDistance
方法使用公式$$ \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2} $$计算距离
- 使用
控制台程序:
- 分步读取用户输入的两个坐标值
- 创建两个
Point
对象 - 调用
GetDistance
方法计算结果 - 使用
F2
格式输出保留两位小数
示例运行结果:
请输入第一个点的坐标:
x1 = 0
y1 = 0
请输入第二个点的坐标:
x2 = 3
y2 = 4
两点之间的距离为:5.00
注意:实际使用中建议添加输入验证(如使用double.TryParse
),此处为简化示例未包含异常处理逻辑。
相关推荐


















