类构造函数中的多个嵌入式对象错误数组

时间:2011-03-26 19:24:29

标签: c# class console

有两个类: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[]*/
        }
    }
}

5 个答案:

答案 0 :(得分:4)

在C#中它是:

private Point[] pnt;

答案 1 :(得分:2)

您无法声明数组类型的变量,如下所示:

private Point pnt[];

必须是这样的:

private Point[] pnt;

这也是 Java中的首选方式(我怀疑你更熟悉它的语言),尽管Java也允许你使用以前的版本。在我看来,它更有意义,因为它将所有类型信息保存在一个地方,与变量名称分开。

接下来你应该看看的是如何在C#中指定属性 - 使用getXsetX使它看起来更像Java而不是C#。

答案 2 :(得分:0)

第一个错误 - 你没有那样声明数组。

private Point[] pnt;

new Point[3]创建一个包含3个项目的Point数组。您无法将此数组分配给Point类型的对象(此时此对象是pnt

由于pntPoint 对象不是数组,因此它不具有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方法或索引将失败。