C# Primer Plus编程练习10.17

using System;



namespace ConsoleApplication1
{
    
class Car                                                //单个汽车   
    {
        
private int position;                                //私有成员

        
public Car()                                        //默认构造函数
        {
            
this.position=0;
        }

        
public Car(int position)                            //带参构造函数
        {
            
this.position=position;
        }

        
public int Position                                    //只读属性
        {
            
get{return(position);}
        }

        
public void Move(int distance)                //移动位置,永久改变this.position值
        {
            this.position
+=distance;
        }

    }

    


    
class CarGame                                            //包含5个car的容器
    {
        
private Car[] cars;
        
        
public CarGame()                                    //构造函数
        {
            cars
=new Car[5];
            
int newPosition;
            
for(int i=0;i<5;i++)
            
{
                Console.WriteLine(
"请输入第{0}辆车的位置:",i+1);
                newPosition
=Convert.ToInt32(Console.ReadLine());
                cars[i]
=new Car(newPosition);
            }

        }

        
public int this [int index]                            //索引    
        {
            
get
            
{
                
if((index<0)||(index>=cars.Length))
                
{
                    Console.WriteLine(
"index error!");
                    
return 0;                                //return语句不能丢,否则会出错
                }

                
else
                    
return cars[index].Position;
            }

        }

        
public void CarMove(int index,int distance)            //调用元素的成员函数
        {
            cars[index].Move(distance);
        }

        
public void Browse()                                //遍历cars的position成员
        {
            
for(int i=0;i<5;i++)
            
{
                Console.WriteLine(
"第{0}辆车的位置是:{1}",i+1,cars[i].Position);
            }

        }

    }

   
    


    
class Test
    

        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
public static int Main()
        
{
            
//
            
// TODO: 在此处添加代码以启动应用程序
            
//
            CarGame myCarGame;
            Console.WriteLine(
"5辆车,初始化其位置");
            myCarGame
=new CarGame();
            Console.WriteLine(
"遍历其位置");
            myCarGame.Browse();

            Console.WriteLine(
"***********************************************************************");

            
do
            
{
                Console.WriteLine(
"选择任务:\nM或m,回车:移动车的位置;\nS或s,回车:检索制定车的位置\nB或b,回车:遍历所有车此刻的位置。");
                
string temps=(Console.ReadLine()).ToUpper();
            
                
switch(temps)
                
{
                    
case "M":
                        Console.WriteLine(
"移动车的位置");
                        
do
                        
{
                            
int index;
                            
do
                            
{
                                Console.WriteLine(
"在1至5辆车中选择需要移动位置的");
                                index
=Convert.ToInt32(Console.ReadLine())-1;
                                
if(index>=0&&index<=4)
                                    
break;
                                Console.WriteLine(
"出错!请重新输入");
                            }

                            
while(true);
                            Console.WriteLine(
"输入需要移动的值,输入正整数向前移动,负整数向后移动,其他出错");
                            
int distance=Convert.ToInt32(Console.ReadLine());
                            myCarGame.CarMove(index,distance);
                            Console.WriteLine(
"移动后,该辆车现在的位置是:"+myCarGame[index]);
                            Console.WriteLine(
"完成移动任务了吗?按Y或y并回车完成,其他键并回车继续");
                            
string temp=(Console.ReadLine()).ToUpper();
                            
if(temp=="Y")
                                
break;
                        }

                        
while(true);
                        
break;
                    
case "S":
                        Console.WriteLine(
"检索某辆车的位置");
                        
do
                        
{
                            
int index;
                            
do
                            
{
                                Console.WriteLine(
"在1至5辆车中选择需要检索位置的");
                                index
=Convert.ToInt32(Console.ReadLine())-1;
                                
if(index>=0&&index<=4)
                                    
break;
                                Console.WriteLine(
"出错!请重新输入");
                            }

                            
while(true);
                            Console.WriteLine(
"第{0}辆车现在的位置是:{1}",index,myCarGame[index]);
                            Console.WriteLine(
"完成检索任务了吗?按Y或y并回车完成,其他键并回车继续");
                            
string temp=(Console.ReadLine()).ToUpper();
                            
if(temp=="Y")
                                
break;
                        }

                        
while(true);
                        
break;
                    
case "B":
                        Console.WriteLine(
"遍历车的位置");
                        myCarGame.Browse();
                        
break;
                    
default:
                        Console.WriteLine(
"没有这个选项,请重新选择!");
                        
break;
                }

                Console.WriteLine(
"\n\n\n所有的任务都完成了吗?按Y或y并回车退出,其他键并回车继续");
                
string temper=(Console.ReadLine()).ToUpper();
                
if(temper=="Y")
                    
break;
            }

            
while(true);


            
//
            
//结束程序
            
//
            Console.WriteLine("\nThanks for using!\nPress Enter to cancle");
            Console.ReadLine();

            
return(0);
        }

    }

}


  这是我第一个正规的C#程序,因为是三、初学,还没有用异常处理以及其他更高级的东西,纯粹是练习来着。
  这是个汽车游戏模拟,Car是汽车类,CarGame是容器类,里面包含5个Car。其实用ArrayList更合适,但为了练习,我没有使用。
  构造函数重载用this更好,我在另一个程序里练习了。get访问器里每一个子句都要有return,不然会出错。在方法里,成员也可能被修改,比如Car.Move方法,我想可能是没有建立其拷贝。main方法里用了switch语句和do-while语句,为了是程序更“合理”,但我不喜欢这么长的main,如果没必要的话以后就不会这样了,只是拿来测试类的功能。

posted on 2005-03-23 22:41  天蓝  阅读(659)  评论(1编辑  收藏  举报