我试图在perl中获取元素数组中的最小和最大元素,每个东西都工作正常,但最小元素没有打印出来:
@array1=();
$i=0;
$array1[$i]=<STDIN>;
$sum=$minimum=$maximum=$array1[$i];
while($array1[$i]!=" ")
{
$i=$i+1;
$array1[$i]=<STDIN>;
$sum=$sum+$array1[$i];
if($array1[$i]>$maximum)
{
$maximum=$array1[$i];
}
if($array1[$i]<$minimum)
{
$minimum=$array1[$i];
}
if($array1[$i]==" ")
{
last;
}
}
print("Entered numbers are : ",@array1);
print("Sum of all numbers is : ",$sum);
print "\n";
print("Minimum number is : ",$minimum);
print "\n";
print("Maximum number is : ",$maximum);
答案 0 :(得分:0)
考虑在循环中输入空格时会发生什么。你将它分配给$ array1 [$ i]。然后检查最小值和最大值。因此,如果您有一个字符串并进行数字比较,它会将字符串转换为数字,如果可以的话(例如“12”为12)。如果您的字符串不是数字(例如空格),则将其转换为0.
我怀疑您输入正数,因此当您输入空格时,最小值的if条件为true,空格位于最小值。如果您输入负数,它将使用您的代码打印出负数。
如果您在检查项目之后和检查之前移动检查以查看是否已完成检查,那么它可能会更好,并且您不会进行比较,因为您并不真正需要完成任何比较/分配,并且输入不是数字。
答案 1 :(得分:0)
移动它:
if($array1[$i]==" ")
{
last;
}
到循环块开始!!
代码的简化版本:
use strict;
use warnings;
my @items;
my ( $sum, $max, $min );
while ( chomp( my $num = <STDIN> ) ) {
last if ( $num eq ' ' );
next if ( $num eq '' );
$max ||= $num;
$min ||= $num;
$sum += $num;
$max = $num if ( $num > $max );
$min = $num if ( $num < $min );
push( @items, $num );
}
printf( "Entered numbers are: %s \n", join( ', ', @items ) );
print( "Sum of all numbers is : ", $sum );
print "\n";
print( "Minimum number is : ", $min );
print "\n";
print( "Maximum number is : ", $max );