0

私はデジタルカメラのように機能する小さなアプリを構築しています。撮影機能で、配列に乱数を挿入したいのですが(これで成功します)、複数の写真を撮ると、値が常に最初の位置。私のコード:

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

4 に答える 4

5

あなたは、次の値を最初の位置に置くとはっきりと言います。

あなたのコードを見てください:

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

iいつも0

これを解決するには、i値をグローバル変数に保存するか、次のインデックスが関数のパラメーターのように受け入れ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
   }
}
于 2013-01-29T07:59:59.160 に答える
2
  1. forループにバグがあります。代わりLengthbuffer変数のを使用したいと思います
  2. 呼び出しTakePhotoが速すぎるため、Random常に同じシードで作成するため、常に同じ「乱数」が生成されます。

代わりに、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);
于 2013-01-29T08:02:17.823 に答える
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();

    }
}
于 2013-01-29T08:04:21.743 に答える
-1

コードに論理エラーがあります:

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

        MemoryCard.buffer[i] = photo;
    }

for ループ変数を見ると、ループは i=0 から i<1 まで実行されています。これは基本的に、ループが 1 回だけ実行されることを意味します (i=0 の場合)。

おそらく毎回iを増やす必要があります

 MemoryCard.buffer[MemoryCard.numberofphotos] = photo;
 MemoryCard.numberofphotos++;   
于 2013-01-29T08:02:06.490 に答える