@xyVal = (4,4,6,6,10,12,18,22,24,28,30);
@yVal = (176,178,180,184,192,202,210,218,224,232,238);
@xxVal = (9,9,9,9,9 ,11,13,15,17,19,19);
@xVal = (168,166,164,162,158,150,142,134,122,116,110);
for ($i = 0; $i < scalar(@xVal); $i++){
for ($i = 0; @xyVal[$i] < @xxVal[$i]; $i++){
@yNewVal = @yVal[$i-1] + (@yVal[$i] - @yVal[$i-1])*(@xxVal[$i] - @xyVal[$i-1])/(@xyVal[$i] - @xyVal[$i-1]);
}
}
print @yNewVal;
我理解为什么它给出了关于第9行的错误Illegal division by zero
(@yNewVal = ...)
如果零之间存在除法,我希望数组中有0。我究竟做错了什么?那么,当除零时,如何避免我的应用程序崩溃?
答案 0 :(得分:4)
该行上的除数为@xyVal[$i] - @xyVal[$i-1]
,因此如果@xyVAl
中有两个相同的相邻值(例如4,4
),则任何情况都会产生0,因此除以零错误。
答案 1 :(得分:2)
你可以说:
@yNewVal = ($_ = @xyVal[$i] - @xyVal[$i-1]) == 0 ? 0 : @yVal[$i-1] + (@yVal[$i] - @yVal[$i-1])*(@xxVal[$i] - @xyVal[$i-1])/$_;
答案 2 :(得分:1)
如果我理解正确的话:
if (@xyVal[$i] == @xyVal[$i-1])
@yNewVal = 0;
else
@yNewVal = @yVal[$i-1] + (@yVal[$i] - @yVal[$i-1])*(@xxVal[$i] - @xyVal[$i-1])/(@xyVal[$i] - @xyVal[$i-1]);
答案 3 :(得分:1)
您可以使用eval
和条件运算符执行try / catch。
eval {
@yNewVal = @yVal[$i-1] + (@yVal[$i] - @yVal[$i-1])*(@xxVal[$i] - @xyVal[$i-1])/(@xyVal[$i] - @xyVal[$i-1]);
1;
} or do {
@yNewVal = (0);
};
print @yNewVal;
但是,您的短语返回标量值并将其放入数组变量中。所以你可能想重新考虑一下。