2016-11-09 92 views
0

我已经写了这个代码在Array找出第二个最高值:找到第二个最高值

var 
i, 
ZweitMax, 
    Max : integer; 

begin 
Max := -maxint; 
ZweitMax := -maxint; 

for i := 1 to FELDGROESSE do 


if inFeld[i] > Max then 
    begin 
    ZweitMax := Max; 
    Max := inFeld[i]; 
    end 
else 
if inFeld[i] > ZweitMax then 
begin 
ZweitMax := inFeld[i]; 
FeldZweitMax := ZweitMax; 
end 
end; 

哪里是在这段代码的问题,为什么它不打印出正确的价值? 信息:代码是一个功能的一部分FeldZweitMax

回答

2

目前,您可以设置ZweitMax 的地方,但只有其中之一还影响功能,FeldZweitMax的返回码。

if声明的第一部分可以变成:

if inFeld[i] > Max then 
begin 
    ZweitMax := Max; 
    FeldZweitMax := ZweitMax; (* add this line *) 
    Max := inFeld[i]; 
end 
(* and so on *) 

,以确保返回值是正确更新。

或者,你可以在这两个地方设置ZweitMax单独再设置在最后的返回值:

for i := 1 to FELDGROESSE do 
begin 
    if inFeld[i] > Max then 
    begin 
     ZweitMax := Max; 
     Max := inFeld[i]; 
    end 
    else 
    begin 
     if inFeld[i] > ZweitMax then 
     begin 
      ZweitMax := inFeld[i]; 
     end 
    end 
end; 
FeldZweitMax := ZweitMax; 

其实我更喜欢后者,因为计算和值的回归是两回事。

+0

好吧,这意味着我需要改变开始/结束? – Marco

+0

它的作品,现在我明白了为什么。谢谢。 – Marco