简单的计划是将选民的最佳候选人与几名候选人匹配 . 想象中的选民回答了10个想象的主题; “-1”表示不同意,“0”表示不关心,“1”表示同意 . 候选人也对同一主题进行了相同的调查,同样的规则适用于他们 . 如果选民或候选人对特定主题投票为“0”,则总协议 Value 不受影响 . 如果选民和候选人之间的值相同,则会增加协议值 . 如果值不同,则协议值递减 . 最后,具有最高 Value 的候选人将被呈现给选民 .
以下是程序的示例终端输入,包括输出:
输入:
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不会正确地比较这些值 . 我无法弄清楚为什么 .
1 回答
在
COMPARE_loop
开始之前将Score
重置为零,否则您将添加或减去前一个候选人的分数 .