这里是新手,正如标题所述,我正在尝试生成一个必须包含随机数(包括负数)但不超过19的数组。 我想到了这个:
use strict;
use warnings;
use feature qw/say/;
my @rand=();
my $all_the_numbers=int(rand(19));
my $i=0;
while ($all_the_numbers<20)
{
my $number=20-int(rand(30)); #in order to randomize negative numbers too
push @rand, $number;
$i++;
last if $i=$all_the_numbers;
}
say "@rand";
但是我总是最终得到一个只有一个元素的数组。知道为什么吗?
更新
首先,感谢您帮助我解决了上一个问题。 现在,我试图删除数组中的每个正数,使其仅包含负数;整个程序如下所示:
#!/usr/bin/perl
use strict;
use warnings;
use feature qw/say/;
use 5.10.1;
my @rand=();
my $all_the_numbers=int(rand(19));
my $i=0;
while ($all_the_numbers<20)
{
my $number=20-int(rand(30));
push @rand, $number;
$i++;
last if $i==$all_the_numbers;
}
say "@rand";
my $h=0;
while ($all_the_numbers<20)
{
for (@rand)
{
if ($rand[0]<0)
{
next; #in order to make it skip the negative ones
}
shift @rand;
}
$h++;
last if $h==$all_the_numbers;
}
say "@rand";
但是,这只能删除数组中第一个负数之前的正数,而保留不变后的结果... 那么,while循环如何不继续删除肯定值呢? 这是一张可以更好地说明自己的照片:https://i.stack.imgur.com/qi7sf.png 预先感谢。
答案 0 :(得分:1)
尝试一下:
[
{ state: 'CA', county: '2', item: 0.019 },
{ item: 0.037 },
{ state: 'MN', county: '1', item: 0.297 },
...
]
观察操作员 last if $i==$all_the_numbers;
。
您可能已经知道,但是为了其他可能访问的读者的利益:
==
比较是否相等。==
将其右侧的值分配给左侧的变量。