有两个类:Point和Triangle。 Point本身就是三角形,应该有一个由Point类组成的3个嵌入对象的数组。
Point工作正常,但是当创建Triangle时出现了一堆错误。 我哪里出错了?
点:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Classes
{
class Point
{
private int x;
private int y;
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public void setX()
{
//get user input, validate
Console.WriteLine("Enter X co-ord: ");
int inputX;
if (Int32.TryParse(Console.ReadLine(), out inputX))
{
setX(inputX);
}
else
{
Console.WriteLine("Invalid input value");
Console.WriteLine("Assigning default value of 0 to X co-ord");
setX(0);
}
}
public void setX(int xx)
{
x = xx;
}
public void setX(Point px)
{
if (px == null)
x = 0;
else
x = px.x;
}
public void setY()
{
//get user input, validate
Console.WriteLine("Enter Y co-ord: ");
int inputY;
if (Int32.TryParse(Console.ReadLine(), out inputY))
{
setY(inputY);
}
else
{
Console.WriteLine("Invalid input value");
Console.WriteLine("Assigning default value of 0 to Y co-ord");
setY(0);
}
}
public void setY(int yy)
{
y = yy;
}
public void setY(Point py)
{
if (py == null)
y = 0;
else
y = py.y;
}
public void setPoint()
{
setX();
setY();
}
public void setPoint(int xx, int yy)
{
setX(xx);
setY(yy);
}
public void setPoint(Point p)
{
setX(p);
setY(p);
}
public Point()
{
setPoint();
}
public Point(int xx, int yy)
{
setPoint(xx, yy);
}
public Point(Point p)
{
setPoint(p);
}
public static Point operator +(Point p1, Point p2)
{
Point temp = new Point(0,0);
temp.x = p1.getX() + p2.getX();
temp.y = p1.getY() + p2.getY();
return temp;
}
public static Point operator -(Point p1, Point p2)
{
Point temp = new Point(0, 0);
temp.x = p1.getX() - p2.getX();
temp.y = p1.getY() - p2.getY();
return temp;
}
public static Point Add(Point p1, Point p2)
{
Point temp = new Point(0, 0);
temp.x = p1.getX() + p2.getX();
temp.y = p1.getY() + p2.getY();
return temp;
}
public static Point Add(int xx, int yy ,Point p)
{
Point temp = new Point(0, 0);
temp.x = xx + p.getX();
temp.y = yy + p.getY();
return temp;
}
public static Point Add(int x1, int x2, int y1, int y2)
{
Point temp = new Point(0, 0);
temp.x = x1 + x2;
temp.y = y1 + y2;
return temp;
}
public Point Add(Point p)
{
Point temp = new Point(0, 0);
temp.x = getX() + p.x;
temp.y = getY() + p.y;
return temp;
}
public Point Add(int xx, int yy)
{
Point temp = new Point(0, 0);
temp.x = getX() + xx;
temp.y = getY() + yy;
return temp;
}
public static Point Subtract(Point p1, Point p2)
{
Point temp = new Point(0, 0);
temp.x = p1.getX() - p2.getX();
temp.y = p1.getY() - p2.getY();
return temp;
}
public static Point Subtract(int xx, int yy, Point p)
{
Point temp = new Point(0, 0);
temp.x = xx - p.getX();
temp.y = yy - p.getY();
return temp;
}
public static Point Subtract(int x1, int x2, int y1, int y2)
{
Point temp = new Point(0, 0);
temp.x = x1 - x2;
temp.y = y1 - y2;
return temp;
}
public Point Subtract(Point p)
{
Point temp = new Point(0, 0);
temp.x = getX() - p.x;
temp.y = getY() - p.y;
return temp;
}
public Point Subtract(int xx, int yy)
{
Point temp = new Point(0, 0);
temp.x = getX() - xx;
temp.y = getY() - yy;
return temp;
}
public void displayPoint()
{
System.Console.WriteLine("Point: X={0} ; Y={1}", getX(), getY());
}
public bool isEqual(Point p)
{
if (x == p.x && y == p.y)
return true;
else
return false;
}
public static bool isEqual(Point p1, Point p2)
{
if (p1.x == p2.x && p1.y == p2.y)
return true;
else
return false;
}
public bool isNotEqual(Point p)
{
if (this.isEqual(p) == true)
return false;
else
return true;
}
public static bool isNotEqual(Point p1, Point p2)
{
if (Point.isEqual(p1, p2) == true)
return true;
else
return false;
}
public static bool operator ==(Point p1, Point p2)
{
if (p1.isEqual(p2) == true)
return true;
else
return false;
}
public static bool operator !=(Point p1, Point p2)
{
if (p1.x == p2.x && p1.y == p2.y)
return true;
else
return false;
}
}
}
三角:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Classes
{
class Triangle
{
private Point pnt[]; /*Bad array declarator*/
public Triangle()
{
pnt = new Point[3]; /*Can't convert Point[] to Point*/
for (int i=0; i<pnt.Length; i++) /*Length doesn't exists in Point*/
pnt[i] = new Point(); /*Can't apply indexing to Point[]*/
}
}
}
答案 0 :(得分:4)
在C#中它是:
private Point[] pnt;
答案 1 :(得分:2)
您无法声明数组类型的变量,如下所示:
private Point pnt[];
必须是这样的:
private Point[] pnt;
这也是 Java中的首选方式(我怀疑你更熟悉它的语言),尽管Java也允许你使用以前的版本。在我看来,它更有意义,因为它将所有类型信息保存在一个地方,与变量名称分开。
接下来你应该看看的是如何在C#中指定属性 - 使用getX
和setX
使它看起来更像Java而不是C#。
答案 2 :(得分:0)
第一个错误 - 你没有那样声明数组。
private Point[] pnt;
new Point[3]
创建一个包含3个项目的Point
数组。您无法将此数组分配给Point
类型的对象(此时此对象是pnt
。
由于pnt
是Point
对象而不是数组,因此它不具有Length
属性。这也是您无法对其应用索引(pnt[i]
)的原因。
所有其他错误都来自第一个 - 错误的数组声明。
答案 3 :(得分:0)
Point[] pnt;
public Triangle()
{
pnt = new Point[3];
for (int i = 0; i < pnt.Length; ++i) pnt[i] = new Point();
}
另外,System.Drawing已经有了一个你可能想要使用的Point结构。
答案 4 :(得分:0)
我将尝试解释错误消息:
private Point pnt[]; /*Bad array declarator*/
数组声明符“[]”必须位于类型后面而不是变量后面,所以将行更改为private Point[] pnt;
pnt = new Point[3]; /*Can't convert Point[] to Point*/
for (int i=0; i<pnt.Length; i++) /*Length doesn't exists in Point*/
pnt[i] = new Point(); /*Can't apply indexing to Point[]*/
更正数组声明后,以下消息将消失。在上面的代码中,pnt
的类型仍为Point
,因此访问Array方法或索引将失败。