【问题标题】:Is there a way to set variables equal to eachother inside of an if statement?有没有办法在 if 语句中将变量设置为彼此相等?
【发布时间】:2019-04-08 18:12:12
【问题描述】:

我正在做一项家庭作业,任务是获取四个用户输入的数字,然后比较它们以输出最大和最小的数字。我不能使用循环,所以我使用 if/else/elsif 语句,但我不断收到错误消息。到目前为止,我已经得到了这个,我不确定我做错了什么。

[社邦]

my $small;
my $big;

print "\nEnter first number: ";
chomp (my $one = <>);

print "\nEnter second number: ";
chomp (my $two = <>);

print "\nEnter third number: ";
chomp (my $three = <>);

print "\nEnter fourth number: ";
chomp (my $four = <>);

if ($one >= $two) {
    $one = $big;
    $two = $small;
}
else {
    $one = $small;
    $two = $big;
}

if ($three >= $big) {
    $three = $big;
}
elsif ($three <= $small) {
    $three = $small;
}

if ($four >= $big) {
    $four = $big;
}
elsif ($four <= $small) {
    $four = $small;
}

print "LRG: $big\n";
print "SML: $small\n";

理想情况下,您输入四个数字,它会输出最大和最小的数字。相反,我得到 “在 [filename].pl 第 29 行, 第 4 行的数字 ge (>=) 中使用未初始化的值 $big。”在第 29 和 36 行。 我也得到 “在连接 (.) 或字符串第 44 行, 第 4 行中使用初始化值 $small。”

【问题讨论】:

  • 你所有的作业都是倒过来的。例如你说$one = $big,你的意思是$big = $one
  • 成功了!谢谢!我想我不知道它必须是一种特定的方式来定义这样的变量。

标签: perl


【解决方案1】:

Perl 的工作方式与几乎所有其他编程语言相同。在赋值语句中,运算符右侧的值被分配给运算符左侧的变量。所以,在这样的声明中:

$one = $big;

您将$big 的值分配给变量$one。正如评论中已经指出的那样,这是错误的方式,你真的想要:

$big = $one;

您可以采用几种更简单的方法。首先,您可以对数字列表进行排序,然后从列表中取出第一个和最后一个元素:

my @sorted = sort { $a <=> $b } ($one, $two, $three, $four);
my ($small, $big) = @sorted[0, $#sorted];

或者您可以使用模块List::Util 中的min()max() 函数。

use List::Util qw[min max];

my $small = min($one, $two, $three, $four);
my $big   = max($one, $two, $three, $four);

【讨论】:

  • List::MoreUtils 的 minmax 如果你想要最小值和最大值会更快
  • @ikegami:是的,但在为明显的初学者编写答案时,我更喜欢使用核心模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多