如何在下一个位置向数组添加值

时间:2013-01-29 07:57:50

标签: c#

我正在构建一个像数码相机一样的小应用程序,在我的拍照功能上,我想在我的阵列中插入一个随机数(我成功了),我的问题是,当我拍多张照片时,价值总是如此进入第一个位置。我的代码:

public override void TakePhoto()
{
    Random rnd = new Random();
    int photo = rnd.Next(1, 10);
    for (int i = 0; i < 1; i++)
    {

        MemoryCard.buffer[i] = photo;
    }
}

class Program
{
    static void Main(string[] args)
    {

        DigitalCamera digitalCamera = 
            new DigitalCamera("kodak", 43, newMemoryCard, 3);

        digitalCamera.TakePhoto();
        digitalCamera.TakePhoto();
        digitalCamera.TakePhoto();

    }
}

如何在每张照片后跳到下一个位置?

4 个答案:

答案 0 :(得分:5)

您明确地说要将下一个值放在第一个位置。

查看您的代码:

for (int i = 0; i < 1; i++)
{
   MemoryCard.buffer[i] = photo;
}

i始终为0

要解决此问题,只需将i值保存到某个全局变量中,或者 next index 接受TakePhoto(...)函数中的参数。

示例:

int curindex = 0; //GLOBAL VARIABLE 

public override void TakePhoto()
{
   Random rnd = new Random();
   int photo = rnd.Next(1, 10);
   if(curindex < MemoryCard.buffer.Length) //IF CURINDEX LESS THE TOTAL ARRAY LENGTH
   {
      MemoryCard.buffer[curindex] = photo;  //ASSIGN PHOTO IN CURRENTINDEX
      curindex ++;                          //INCEREMENT CURRENTINDEX
   }
}

答案 1 :(得分:2)

  1. 您的for循环中有一个错误,我假设您要使用Length变量的buffer而不是
  2. 您正在快速调用TakePhoto,因此您始终使用相同的种子创建Random,因此始终生成相同的“随机”数字。
  3. 而是将Random实例作为参数传递给方法或使用字段变量。

    public override void TakePhoto(Random rnd)
    {
        int photo = rnd.Next(1, 10);
        for (int i = 0; i < MemoryCard.buffer.Length; i++)
        {
    
            MemoryCard.buffer[i] = photo;
        }
    }
    

    现在始终使用相同的实例:

    Random r = new Random();
    DigitalCamera digitalCamera = new DigitalCamera("kodak", 43, newMemoryCard, 3);
    digitalCamera.TakePhoto(r);
    digitalCamera.TakePhoto(r);
    digitalCamera.TakePhoto(r);
    

答案 2 :(得分:1)

我认为修改代码后会解决您的问题:

class DigitalCamera
{
    static int currentPhotoNumber = 0;
    private Random rnd = new Random();

    public override void TakePhoto()
    {
        int photo = rnd.Next(1, 10);
        MemoryCard.buffer[currentPhotoNumber++] = photo;
    }
}
class Program
{
    static void Main(string[] args)
    {

        DigitalCamera digitalCamera = new DigitalCamera("kodak", 43, newMemoryCard, 3);

        digitalCamera.TakePhoto();
        digitalCamera.TakePhoto();
        digitalCamera.TakePhoto();

    }
}

答案 3 :(得分:-1)

您的代码中存在逻辑错误:

 for (int i = 0; i < 1; i++)
    {

        MemoryCard.buffer[i] = photo;
    }

如果查看for循环变量,循环从i = 0运行到i <1。这基本上意味着循环只运行一次(对于i = 0)。

你需要每次增加i,也许

 MemoryCard.buffer[MemoryCard.numberofphotos] = photo;
 MemoryCard.numberofphotos++;