我正在构建一个像数码相机一样的小应用程序,在我的拍照功能上,我想在我的阵列中插入一个随机数(我成功了),我的问题是,当我拍多张照片时,价值总是如此进入第一个位置。我的代码:
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();
}
}
如何在每张照片后跳到下一个位置?
答案 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)
Length
变量的buffer
而不是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);
答案 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++;