Random float but not the same

Hello guys. I trying to make tap game namely:
Player have 4 cubes on screen, randomly colored, and he must tap if it is colored.
I maked maaaaany random generators, I looked the same ways but I don’t have a idea ;c

So… my last code look like this:

    public float newNumber;
    public float lastNumber;
    public float finalNumber;

    //its only for preview

    void randomGenerator()
    {
        newNumber = Random.Range(1, 4);
        lastNumber = newNumber;//its in update
        if (newNumber != lastNumber)
        {
            finalNumber = newNumber;
            print(finalNumber);
        }
        else 
        {
            //generate one more time
        }
    }

I want in order to generated number never be printed if it is the same like previous. I know, my English is low but if you don’t know something , tell me. Above code not working because script generating number longer time. Thank you in advance guys:')

Something like this:

public float GetDifferentRandomInRange(float from, float to, float notValue)
{
    float value;
    while ((value = Random.Range(from, to)) == notValue) { }
    return value;
}

For clearer idea of what it is doing:

public float GetDifferentRandomInRange(float from, float to, float notValue)
{
    float value;
    do // Keep doing this:
    {
        // Generate a random value
        value = Random.Range(from, to);
    }
    while (value == notValue); // until the value isn't the same as the last
    return value; // last generated value is good to go
}

I think you want to use int instead of float though, since you are talking 4 or however many discreet cubes.

You’re assigning lastNumber to equal newNumber directly before the if statement which tests that they’re equal. This will cause the if statement to always be true. The following code should work to give you a non-repeating random number.

 void randomGenerator()
 {
    do {
       newNumber = Random.Range(1, 4);
    } while (newNumber == lastNumber);

   lastNumber = finalNumber = newNumber;
 }

I don’t see a reason to even use finalNumber, but I left it in since you have it in your code. Having a variable to hold the newNumber and lastNumber should be enough.