Tener problemas para obtener el valor de la matriz en Solidity

¡Hola, soy nuevo en Solidity!. Tengo una matriz simple que agrega algunos números en una matriz.

pragma solidity ^0.4.11;
Contract TestArray{
    uint[] public numbers;
    function addNumber(uint number){
        numbers.push(number);
    }

Esta función getNumbers() está devolviendo todos los valores

  function getNumbers() constant returns(uint[]){
        return numbers;
    }

Pero cuando trato de verificar si el no existe, devuelve verdadero solo para el primer valor. Para el resto del valor está devolviendo falso

function checkNoExists (uint no) constant returns(bool){
        for(uint i=0; i<numbers.length; i++){
            if(numbers[i]==no){
                return true;
            } else{
                return false;
            }
        }
    }

¡Por favor ayuda!

¿Lo has probado usando Remix?

Respuestas (1)

Hay un error en su checkNoexistsfunción. Si marca cualquier otra cosa que no sea primero if(numbers[i]==no), esta condición se ejecuta como falsa i=0y regresa false. El código funciona como debería, su lógica es incorrecta. Usa esto en su lugar:

function checkNoExists (uint no) constant returns(bool){
    for(uint i=0; i<numbers.length; i++){
        if(numbers[i]==no){
            return true;
        }
    }
    return false;
}
Sí, debería funcionar.