C# 经典入门12章-使用泛型-1

Vector类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Chapter11
{
   public class Vector
    {
       public double? R = null;
       public double? Theta = null;
       public double? ThetaRadians
       {
           get {
               return (Theta * Math.PI / 180.0);
               }
        }

       public Vector(double? r, double? theta)
       {
           if (r < 0)
           {
               r = -r;
               theta += 180;
           }
           theta = theta % 360;
           R = r;
           Theta = theta;
       }
       public static Vector operator +(Vector op1, Vector op2)
       {
           try
           {
               double newX = op1.R.Value * Math.Sin(op1.ThetaRadians.Value) + op2.R.Value * Math.Sin(op1.ThetaRadians.Value);

               double newY = op1.R.Value * Math.Cos(op1.ThetaRadians.Value) + op2.R.Value * Math.Cos(op1.ThetaRadians.Value);

               double newR = Math.Sqrt(newX * newX + newY * newY);
               double newTheta = Math.Atan2(newX, newY) * 180.0 / Math.PI;
               return new Vector(newR, newTheta);

           }
           catch
           {
               return new Vector(null,null);
           }
        }
       public static Vector operator -(Vector op1)
       {
           return new Vector(-op1.R,op1.Theta);
 
       }
       public static Vector operator -(Vector op1,Vector op2)
       {
           return op1+ (-op2);

       }

       public override string ToString()
       {
           string rString = R.HasValue ? R.ToString() : "null";
           string thetaString = Theta.HasValue ? Theta.ToString() : "null";
           return string.Format("{0},{1}", rString, thetaString);
       }
    }
}

修改Program类的代码如下:

 static void Main(string[] args)
        {
           
            Vector v1 = GetVector("vector1");
            Vector v2= GetVector("vector2");
            Console.WriteLine("{0}+{1}={2}", v1, v2, v1 + v2);
            Console.WriteLine("{0}-{1}={2}", v1, v2, v1 - v2);
            Console.ReadKey();
        }

         static Vector GetVector(string name)
        {
            Console.WriteLine("Input{0}magnnitude:",name);
            double? r = GetNullableDouble();
            Console.WriteLine("Input {0} angle (in degrees):", name);
            double? theta = GetNullableDouble();
            return new Vector(r,theta);

         }

         static double? GetNullableDouble()
        {
            double? result;
            string userInput = Console.ReadLine();
            try
            {
                result = double.Parse(userInput);
            }
            catch
            {
                result = null;
            }
            return result;
        }

 

 

posted @ 2013-07-19 09:23  秋水惜朝  阅读(135)  评论(0编辑  收藏  举报