在perl中查找最小元素时出错

时间:2014-05-17 04:32:33

标签: perl

我试图在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);

2 个答案:

答案 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 );