整数操作数错误

时间:2013-10-10 15:42:43

标签: matlab

嘿,我在这里遇到一个奇怪的错误。此函数只是找到一个数字的正确除数并返回它们。

function [divisors] = SOEdivisors(num)
%SOEDIVISORS This function finds the proper divisors of a number using the sieve
%of eratosthenes


    %check for primality
    if isprime(num) == 1
        divisors = [1];


    %if not prime find divisors
    else
        divisors = [0 2:num/2]; %hard code a zero at one.

        for i = 2:num/2
            if divisors(i) %if divisors i ~= 0

                %if the remainder is not zero it is a divisor
                if rem(num, divisors(i)) ~= 0

                    %remove that number and all its multiples from the list
                    divisors(i:i:num/2) = 0;
                end
            end
        end

        %add 1 back and remove all zeros
        divisors(1) = 1;
        divisors = divisors(divisors ~= 0);
    end
end

我收到的错误是:

Integer operands are required for colon operator when used as index

指的是第23行。

第23行

divisors(i:i:num/2) = 0;

但是我和数字都应该是整数...我知道我是一个整数。但即使我尝试

num = int8(num)

或类似的东西,我仍然得到错误。

感谢阅读!

3 个答案:

答案 0 :(得分:1)

如果num是奇数,则num/2不是整数...

答案 1 :(得分:0)

您的行只包含两个用于编制索引的部分。

i

num/2

正如您已经提到inum是整数,唯一合乎逻辑的解释是num是奇数。

然后num/2将不是整数。


也许您有兴趣使用fix(num/2)(这将有效地用于divisors的创作),或者可能roundceil

答案 2 :(得分:0)

使用时:

在命令代码中,这意味着您知道结果是非点数,例如0.1或0.2或2.1。你应该有1或2或21。 你的结果也必须是无符号数。例如:1或2或21不是-1或-2或-21。

然后使用签名类型的int或使用" fix();"命令。 例如:

a=2.1;

a=fix(a);那么" a"价值将是2; 祝你有美好的一天。