【问题标题】:Ada for loop isn't doing correct comparisonAda for 循环没有进行正确的比较
【发布时间】:2015-03-06 01:49:48
【问题描述】:

简单的程序是将一个选民的最佳候选人与几个候选人进行匹配。假想选民回答了 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

使用打印语句,我能够确定一切正常,除了实际将选民值与当前候选值进行比较的 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 不会正确比较这些值。我不知道为什么。

【问题讨论】:

  • 是否应该在每次使用 CompareLoop 时将 Score 的值重置为零?
  • @DavidDubois谢谢

标签: loops for-loop ada gnat ada2012


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多