Ada for 循环没有进行正确的比较
Ada for loop isn't doing correct comparison
简单的程序是将一个选民的最佳候选人与几个候选人进行匹配。假想的选民回答了 10 个假想的主题; “-1”表示不同意,“0”表示不关心,“1”表示同意。候选人也对相同的主题进行了相同的调查,同样的规则也适用于他们。如果选民或候选人对特定主题投了“0”票,则总协议值不受影响。如果选民和候选人之间的值相同,这会增加协议值。如果值不同,则协议值递减。最后,将价值最高的候选人呈现给选民。
这是程序的示例终端输入,包括输出:
输入:
0 0 0 1 1 1 -1 -1 -1 1
7
A
1 1 1 1 1 1 1 1 1 1
B
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
C
1 -1 1 -1 1 -1 1 -1 1 -1
D
1 0 1 0 1 0 1 0 1 0
E
0 -1 0 -1 0 -1 0 -1 0 -1
F
1 1 1 1 0 0 0 0 0 0
G
0 0 0 1 -1 0 0 -1 1 1
输出:A、F、G
使用 print 语句,我能够确定一切正常,除了 for 循环,它实际上将选民值与当前候选值进行比较:
--inner loop to calculate match value by comparing incoming candidate values with voter array values
COMPARE_Loop :
for J in Integer range 1 .. 10 loop
Get(NextVote);
if NextVote = 0 or VoterList(J) = 0 then
Put(VoterList(J));
--Do nothing
elsif NextVote = VoterList(J) then
Score := Score + 1;
else
Score := Score - 1;
end if;
end loop COMPARE_Loop;
验证其他所有内容均已正确接受,并在整个程序中保持正确的值,但 COMPARE_Loop 无法正确比较这些值。我不明白为什么。
在 COMPARE_loop
开始前将 Score
重置为零,否则您将增加或减少前一位候选人的分数。
--inner loop to calculate match value by comparing incoming candidate values with voter array values
Score := 0;
COMPARE_Loop :
for J in Integer range 1 .. 10 loop
简单的程序是将一个选民的最佳候选人与几个候选人进行匹配。假想的选民回答了 10 个假想的主题; “-1”表示不同意,“0”表示不关心,“1”表示同意。候选人也对相同的主题进行了相同的调查,同样的规则也适用于他们。如果选民或候选人对特定主题投了“0”票,则总协议值不受影响。如果选民和候选人之间的值相同,这会增加协议值。如果值不同,则协议值递减。最后,将价值最高的候选人呈现给选民。
这是程序的示例终端输入,包括输出:
输入:
0 0 0 1 1 1 -1 -1 -1 1
7
A
1 1 1 1 1 1 1 1 1 1
B
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
C
1 -1 1 -1 1 -1 1 -1 1 -1
D
1 0 1 0 1 0 1 0 1 0
E
0 -1 0 -1 0 -1 0 -1 0 -1
F
1 1 1 1 0 0 0 0 0 0
G
0 0 0 1 -1 0 0 -1 1 1
输出:A、F、G
使用 print 语句,我能够确定一切正常,除了 for 循环,它实际上将选民值与当前候选值进行比较:
--inner loop to calculate match value by comparing incoming candidate values with voter array values
COMPARE_Loop :
for J in Integer range 1 .. 10 loop
Get(NextVote);
if NextVote = 0 or VoterList(J) = 0 then
Put(VoterList(J));
--Do nothing
elsif NextVote = VoterList(J) then
Score := Score + 1;
else
Score := Score - 1;
end if;
end loop COMPARE_Loop;
验证其他所有内容均已正确接受,并在整个程序中保持正确的值,但 COMPARE_Loop 无法正确比较这些值。我不明白为什么。
在 COMPARE_loop
开始前将 Score
重置为零,否则您将增加或减少前一位候选人的分数。
--inner loop to calculate match value by comparing incoming candidate values with voter array values
Score := 0;
COMPARE_Loop :
for J in Integer range 1 .. 10 loop