2013年3月10日 星期日

小山的 C# 教學-第15課-Class 簡介(續)

本課簡介

此課主要在延續上一課的介紹
講解不同種類的 method
以及看一下如何使用物件來互動

教學影片

注意:影片有高畫質 720P 的選項,可以看得更清楚喔!


重點提示

1. 如果沒有輸出值的話,就要用 void 代替輸出值
void 代表「沒有任何值」

2. 如果要取得輸入值的話,必須用類似宣告變數的方式宣告輸入值
例如:talk 這個 method 有兩個輸入值,字串 sname 與數字 sgrade
那就要打成 p.... talk(string sname, int sgrade) { 定義 method }

3. 將資料包裝成物件可以幫助重複使用資料

4. 將物件傳入其他物件的 method 中使用就是一種「物件互動」的方式

練習

請建立一個車子的 Class,並且新增兩個 method,分別叫做 speedUp 與 crash
把車子剛建立時的速度設為 0,並建立兩輛車子 A, B

假設 A, B 這兩輛車子相向而行
如果呼叫 speedUp() 就會加速(Ex: +10 km/hr)
然後 crash 接受一個輸入值,代表被撞的車

呼叫 crash 就會輸出字串「XX 車撞上 YY 車」

請模擬 A 車以 100 km/hr 的速度撞上 B 車

Hint: 你可能需要一個 property 紀錄速度,然後用 for 迴圈加速個幾次

22 則留言:

  1. 有時我喜歡看天線寶寶,因為很單純~

    回覆刪除
  2. 小山您好~ 加速那個不會寫,可以請老師講解嗎?

    回覆刪除
    回覆
    1. 直接在button寫 for迴圈
      class裡 宣告一個"speed"紀錄現在速度
      如果不到100就繼續加10 直到100

      for(car.speed = 0;car.speed<=100;car.speed = car.speed+10)

      刪除
    2. 謝謝你的教學影片,獲益良多

      想請問加速的部分
      如果for loop直接寫在button裡面
      看起來應該就不會用到speedUp這個method了?

      刪除
    3. speedUp 這個 method 的目的是要讓外界有個手段控制車子的速度
      這個練習題希望大家在寫的時候不要直接修用 Car 的 property
      而是透過呼叫 10 次 speedUp 來達成這個目的

      刪除
    4. 這是我寫的,每按一下Button可以顯示A車目前時速,到100KM會顯示A車撞上B車
      小山老師不知道這樣算不算有正確解答呢?

      Car.cs:

      class Car
      {
      public string aCar;
      public string bCar;
      public int speed;

      public string speedUp(Car c)
      {
      return aCar + "目前速度為" + c.speed + " km/hr";
      }

      public string crash(Car c2)
      {
      return aCar + "撞上" + c2.bCar;
      }
      }


      Form1.cs

      Car c = new Car();
      c.aCar = "Benz";
      for (c.speed = 0; c.speed <= 100; c.speed += 10)
      {
      MessageBox.Show(c.speedUp(c));
      if (c.speed == 100)
      {
      Car c2 = new Car();
      c2.bCar = "BMW";

      MessageBox.Show(c.crash(c2));
      }
      }

      刪除
    5. 作者已經移除這則留言。

      刪除
    6. return aCar + "目前速度為" + c.speed + " km/hr";



      return aCar + "目前速度為" + speed + " km/hr";

      就可以了吧

      使用C的方法已經把所有c的數值都帶入了

      不用再刻意寫一次

      刪除
    7. public string speedUp(Car c)
      Messagebox.show(c.speedUp(c))
      Messagebox.show(c.crash(c2))

      請問Car c 跟括號裡的c與c2是什麼意思?

      刪除
  3. 我設定之後 我一直讀不到 seepup的值

    回覆刪除
    回覆
    1. 這樣我可能不太容易判斷到底哪裡出了問題
      你可以先用滑鼠移到錯誤的地方上面
      看看錯誤訊息顯示甚麼

      刪除
  4. 作者已經移除這則留言。

    回覆刪除
  5. 小山老師好,請您指導以下是否正確?謝謝您
    Car.cs→
    class Car
    {
    //property
    public int Speed;
    public string CarName;


    //method
    public string SpeedUp()
    {
    return "目前"+ CarName + "車速:" + Speed;
    }

    public string Crash(Car a)
    {
    return CarName + "撞上" + a.CarName;
    }
    }

    form1.cs的button→
    private void button1_Click(object sender, EventArgs e)
    {
    Car bmw = new Car();
    bmw.CarName = "BMW";
    bmw.Speed = 0;
    MessageBox.Show (bmw.SpeedUp());

    Car vovo = new Car();
    vovo.CarName = "VOVO";

    for (bmw.Speed = 10; bmw.Speed <=100; bmw.Speed += 10)
    {
    MessageBox.Show(bmw.CarName + "目前車速:" + bmw.Speed + ",加速中~~");
    }
    MessageBox.Show(bmw.Crash(vovo));
    }

    回覆刪除
  6. 不知道這個答案是不是小山老師要我們練習的
    也感謝樓上幾位同學的分享~

    form1.cs
    car c = new car();//事件1>車子行駛
    c.name = "BMW";


    for(c.speed = 0; c.speed <= 100; c.speed += 10)//每呼叫一次speedUP+10 km/hr
    {
    MessageBox.Show(c.speedUP());//紀錄速度
    }
    car c2 = new car();//事件2>車禍
    c2.name = "toyota";//被撞的車
    c.speed = 100;//模擬 A 車以 100 km/hr 的速度撞上 B 車
    MessageBox.Show(c.crash(c2));

    car.cs

    class car
    {
    public int speed;//紀錄速度
    public string name;//雙方車輛

    public string speedUP()//行駛
    {
    return name + "正在以" + speed + "km/hr的速度行駛";
    }

    public string crash(car c)//發生車禍
    {
    return name +"以"+speed+"km/hr的速度撞上"+c.name;
    }

    回覆刪除
  7. 謝謝小山 老師

    還請指教是否正確
    class Car
    {
    public string color;
    public int spee;

    public int speedUp() {
    return spee = spee + 10;
    }

    public string crash(Car c) {
    return color + "車撞上" + c.color +"車" ;
    }
    }

    ------------Form1.cs-----------------------------------------
    Car BB = new Car();
    BB.color = "黃色";
    BB.spee = 0;

    Car CC = new Car();
    CC.color = "紅色";
    CC.spee = 0;

    int totalSpeed;

    while (BB.spee<100) {
    totalSpeed = BB.speedUp();
    MessageBox.Show("速度"+BB.spee);
    if (totalSpeed == 100) {
    MessageBox.Show(BB.crash(CC));
    }
    }

    回覆刪除
  8. 謝謝小山老師的教導
    看到老師出的練習題 我只能寫出比較簡單的出來...
    Class1.cs
    public string SpeedUP()
    {
    return "A車目前以時速" + Grabe + "前進";
    }

    public string crash()
    {
    return "A車在時速" + Grabe + "速度下撞上了B車";
    }

    Form1.cs
    Class1 s = new Class1();
    s.Grabe = 10;

    for (s.Grabe = 10; s.Grabe <= 100; s.Grabe += 10)
    {
    MessageBox.Show(s.SpeedUP());
    if (s.Grabe == 100)
    {
    MessageBox.Show(s.crash());
    }

    }

    回覆刪除
  9. 用之前學的 numericUpDown 再配合 class 來計算 A / B 車誰先到達目的地 :3

    /* Class Code */
    class Car
    {
    public double speed;
    public double distance;

    public string SaySpeed(Car car1, Car car2)
    {
    return "A車正在以每小時 " + car1.speed + " 公里行駛\n" +
    "B車正在以每小時 " + car2.speed + " 公里行駛";

    }

    public string CalculationTime(Car car1, Car car2)
    {
    double car1Time = distance / car1.speed;
    double car2Time = distance / car2.speed;

    if (car1Time < car2Time)
    return "A車會先到達";
    else if (car1Time == car2Time)
    return "A車和B車同時到達";
    else
    return "B車會先到達";
    }
    }

    /* Button Code */
    private void button1_Click(object sender, EventArgs e)
    {
    Car car1 = new Car();
    car1.speed = (double)NUDspeedCar1.Value;
    car1.distance = (double)NUDdistance.Value;

    Car car2 = new Car();
    car2.speed = (double)NUDspeedCar2.Value;
    car2.distance = (double)NUDdistance.Value;

    MessageBox.Show(car1.SaySpeed(car1, car2));

    MessageBox.Show(car1.CalculationTime(car1, car2));
    }
    }

    回覆刪除
  10. 我來交作業了~
    class Car
    {
    public string color;
    public string name;
    public int Speed;

    public string Run()
    {
    return color + "的"+name+"車正在以" + Speed + "km/hr速度前進";
    }

    public void SpeedUp()
    {
    Speed = Speed + 10;

    }

    public string crash(Car c)
    {
    return name + "車以" + Speed + "km/hr速度撞上了" + c.name + "車";
    }
    }
    }

    private void Button1_Click(object sender, EventArgs e)
    {
    Car c = new Car();
    c.name = "A車";
    c.color = "紅色";
    c.Speed = 0;

    Car c2 = new Car();
    c2.name = "B車";
    c2.color = "藍色";
    c2.Speed = 50;

    for(int i = 0; i <10; i++)
    {
    c.SpeedUp();
    MessageBox.Show(c.Run());
    MessageBox.Show(c2.Run());

    if (c.Speed == 100)
    {
    MessageBox.Show(c.crash(c2));
    }

    }
    }

    回覆刪除
  11. 不確定是不是老師要我做的 但我還是來交作業了
    class Caraccident
    {
    public int nowspeed;
    public string A;
    public string B;

    public string crash()
    {
    return A + "車撞上" + B + "車";
    }
    public void speedUp()
    {
    nowspeed = nowspeed + 10;
    }
    public string speednow()
    {
    return "現在時速" + nowspeed;
    }

    }
    private void Caraccident_Click(object sender, EventArgs e)
    {
    Caraccident ca = new Caraccident();

    ca.A = "a";
    ca.B = "b";
    ca.nowspeed = 0;

    for (ca.nowspeed = 0; ca.nowspeed < 100; ca.speedUp())
    {
    MessageBox.Show(ca.speednow());

    }

    MessageBox.Show(ca.crash());

    回覆刪除
  12. 小山老師你好 請問一下
    public string Talk(string sName,int sGrade)
    {
    return sGrade + "年級的" + sName + "對" + sGrade + "年級的" + sName + "說你好";
    }
    這樣子的寫法要怎麼修改才正確呢?
    謝謝老師

    回覆刪除
  13. private void button2_Click(object sender, EventArgs e)
    {
    Car c1 = new Car();
    c1.CarName = "Toyota";
    c1.Speed = 0;
    Car c2 = new Car();
    c2.CarName = "Honda";
    c2.Speed = 0;

    for (c1.Speed = 0;c1.Speed<=100;c1.SpeedUp())
    {

    if(c1.Speed==100)
    {
    MessageBox.Show(c1.Crash(c2));
    }
    }

    }

    class Car
    {
    public string CarName;
    public int addspeed;
    public int Speed;

    public void SpeedUp()
    {
    addspeed = addspeed + 10;
    }
    public string Crash(Car c)
    {
    return CarName + "撞上了" + c.CarName;
    }
    }

    不知道這樣寫哪裡出錯了,執行就會當掉不動...

    回覆刪除
  14. 我也來分享我的寫法
    雖然不一定是最好的@@"

    class Car :
    public string CarName; //汽車名稱
    public int CarSpeed; //汽車速度
    public void SpeedUp()
    {
    for (int i = 0; i < 10; i++)
    {
    CarSpeed += 10; //加速
    }
    }
    public string Carsh(Car WhobeCrash)
    {
    return this.CarName + "以 " + CarSpeed + "km/hr 的速度撞上 " + WhobeCrash.CarName;
    }
    --------------------------------------
    Form1 :
    private void button1_Click(object sender, EventArgs e)
    {
    Car carA = new Car();
    Car carB = new Car();
    carA.CarName = "A車";
    carA.SpeedUp();
    carB.CarName = "B車";
    carB.CarSpeed = 0;
    MessageBox.Show(carA.Carsh(carB));
    }

    回覆刪除