首页 文章

Ada for loop没有做正确的比较

提问于
浏览
0

简单的计划是将选民的最佳候选人与几名候选人匹配 . 想象中的选民回答了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 回答

  • 1

    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
    

相关问题