0
@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;

Illegal division by zero9行目(@yNewVal = ...)に関するエラーが表示される理由を理解しています

ゼロの間に除算がある場合、配列に0を入れたいです。私は何を間違っていますか?では、ゼロ除算が発生したときにアプリケーションがクラッシュしないようにするにはどうすればよいでしょうか?

4

4 に答える 4

4

その行の除数はです。したがって、 (たとえば)@xyVal[$i] - @xyVal[$i-1]に2つの同一の隣接する値がある場合は、0になり、ゼロ除算エラーが発生します。@xyVAl4,4

于 2011-10-24T20:54:06.283 に答える
2

あなたは言えた:

@yNewVal = ($_ = @xyVal[$i] - @xyVal[$i-1]) == 0 ? 0 : @yVal[$i-1] + (@yVal[$i] - @yVal[$i-1])*(@xxVal[$i] - @xyVal[$i-1])/$_;
于 2011-10-24T21:08:08.250 に答える
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]);
于 2011-10-24T20:53:11.947 に答える
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;

ただし、フレーズはスカラー値を返し、それを配列変数に入れています。したがって、それをリファクタリングすることをお勧めします。

于 2011-10-24T20:53:24.643 に答える