山东大学linux应用实验五,山东大学C#实验: 实验5 C#高级特性

实验5-1

B.

(1)当装入水果超过10个时,会抛出异常:索引超过了数组界限

解决方法:修改程序在加入前比较水果篮中数目是否已经为10,若未达到则继续添加,若水果数量达到十个时,则停止添加,并弹出篮子已满的警告.

修改程序如下:

using System;

namespace test5_1_1

{

public class Fruit

{

public virtual string Name

{

get

{

return ("Fruit");

}

}

public static int length { get; set; }

}

public class Apple : Fruit

{

public override string Name

{

get

{

return ("Apple");

}

}

}

public class Banana : Fruit

{

public override string Name

{

get

{

return ("Banana");

}

}

}

public interface IEnumerable

{

IEnumerator GetEnumerator();

}

public interface IEnumerator

{

object Current

{

get;

}

bool MoveNext();

void Reset();

}

public class FruitBasket : IEnumerable

{

static int Max = 10;

Fruit[] basket = new Fruit[Max];

int a = Fruit.length;

public static int count = 0;

internal Fruit this[int index]

{

get

{

return (basket[index]);

}

set

{

basket[index] = value;

}

}

internal int Count

{

get

{

return (count);

}

}

public void Add(Fruit fruit)

{

if (count >= Max)

{

Console.WriteLine("超出水果筐容量!");

}

basket[count++] = fruit;

}

public IEnumerator GetEnumerator()

{

return (new FruitBasketEnumerator(this));

}

}

public class FruitBasketEnumerator : IEnumerator

{

FruitBasket fruitBasket;

int index;

public void Reset()

{

index = -1;

}

public object Current

{

get

{

return (fruitBasket[index]);

}

}

public bool MoveNext()

{

if (++index >= fruitBasket.Count)

return false;

else

return true;

}

internal FruitBasketEnumerator(FruitBasket fruitBasket)

{

this.fruitBasket = fruitBasket;

Reset();

}

}

class CollectionsExample

{

static void Main(string[] args)

{

int a = 0;

int b = 0;

FruitBasket fruitBasket = new FruitBasket();

for (int i = 0; i < 2; i++)

{

if (FruitBasket.count <= 10)

{

Console.WriteLine("Adding a Banana");

fruitBasket.Add(new Banana());

a = i + 1;

}

else

{

break;

}

}

for (int j = 0; j < 7; j++)

{

if (FruitBasket.count <= 9)

{

Console.WriteLine("Adding an Apple");

fruitBasket.Add(new Apple());

b = j + 1;

}

else

{

break;

}

}

if (a + b == 10)

{

Console.WriteLine("水果篮容量已到达上限!");

}

Console.WriteLine();

Console.WriteLine("The basket is holding!");

Console.WriteLine(a + " Apple(s)");

Console.WriteLine(b + " Banana(s)");

Console.Read();

}

}

}

运行结果如下:

未达到10个时,香蕉两个,苹果七个

c8a0371e872bce9c290a693aaa2bc64b.png

总数达到10个时,香蕉四个,苹果六个

ee1936a07e23d1238cb497757fbd5026.png

(2)在水果篮中加入橙子

实验代码:

using System;

namespace test5_1_2

{

public class Fruit

{

public virtual string Name

{

get

{

return ("Fruit");

}

}

public static int length { get; set; }

}

public class Apple : Fruit

{

public override string Name

{

get

{

return ("Apple");

}

}

}

public class Banana : Fruit

{

public override string Name

{

get

{

return ("Banana");

}

}

}

public class Orange : Fruit

{

public override string Name

{

get

{

return ("Orange");

}

}

}

public interface IEnumerable

{

IEnumerator GetEnumerator();

}

public interface IEnumerator

{

object Current

{

get;

}

bool MoveNext();

void Reset();

}

public class FruitBasket : IEnumerable

{

static int Max = 10;

Fruit[] basket = new Fruit[Max];

int a = Fruit.length;

public static int count = 0;

internal Fruit this[int index]

{

get

{

return (basket[index]);

}

set

{

basket[index] = value;

}

}

internal int Count

{

get

{

return (count);

}

}

public void Add(Fruit fruit)

{

if (count >= Max)

{

Console.WriteLine("超出水果筐容量!");

}

basket[count++] = fruit;

}

public IEnumerator GetEnumerator()

{

return (new FruitBasketEnumerator(this));

}

}

public class FruitBasketEnumerator : IEnumerator

{

FruitBasket fruitBasket;

int index;

public void Reset()

{

index = -1;

}

public object Current

{

get

{

return (fruitBasket[index]);

}

}

public bool MoveNext()

{

if (++index >= fruitBasket.Count)

return false;

else

return true;

}

internal FruitBasketEnumerator(FruitBasket fruitBasket)

{

this.fruitBasket = fruitBasket;

Reset();

}

}

class CollectionsExample

{

static void Main(string[] args)

{

int a = 0;

int b = 0;

int c = 0;

FruitBasket fruitBasket = new FruitBasket();

for (int i = 0; i < 3; i++)

{

if (FruitBasket.count <= 10)

{

Console.WriteLine("Adding a Banana");

fruitBasket.Add(new Banana());

a = i + 1;

}

else

{

break;

}

}

for (int j = 0; j < 3; j++)

{

if (FruitBasket.count <= 9)

{

Console.WriteLine("Adding an Apple");

fruitBasket.Add(new Apple());

b = j + 1;

}

else

{

break;

}

}

for (int k = 0; k < 3; k++)

{

if (FruitBasket.count <= 9)

{

Console.WriteLine("Adding an Oange");

fruitBasket.Add(new Orange());

c = k + 1;

}

else

{

break;

}

}

if (a + b + c == 10)

{

Console.WriteLine("水果篮容量已到达上限!");

}

Console.WriteLine();

Console.WriteLine("The basket is holding!");

Console.WriteLine(a + " Apple(s)");

Console.WriteLine(b + " Banana(s)");

Console.WriteLine(c + " Orange(s)");

Console.Read();

}

}

}

实验结果:

未达到10个,三种水果各三个

9ff92f2933d9827e732396f3ae433c59.png

超过十个,香蕉三个,苹果两个,橙子六个

ce19eccd7d4ae0d37a1b4e1519049e73.png

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值