How to make a program that lies one-third of the time? I am supposed to take this code (that I made):

public void showUpdatedStatus()
{
    if(((itsUsersNumber - itsSecretNumber) &lt;= 2) &amp;&amp; ((itsUsersNumber - itsSecretNumber) &gt;= -2))
        JOptionPane.showMessageDialog(null, "You're hot!");
    if (((itsUsersNumber - itsSecretNumber) &lt;= 6) &amp;&amp; ((itsUsersNumber - itsSecretNumber) &gt;= -6))
        JOptionPane.showMessageDialog(null, "You're warm.");
    if ((itsUsersNumber - itsSecretNumber) &lt; -6)
        JOptionPane.showMessageDialog(null, "Too low.");
    if ((itsUsersNumber - itsSecretNumber) &gt; 6)
        JOptionPane.showMessageDialog(null, "Too high.");
}


And change it so it does this:


  Have the program lie one-third of the time that the guess is too high;
  it says it is too low. But it never lies about the guess being too
  low, nor does it lie twice in a row.


I believe I have managed to do this with this method for checking whether the guess is "too high."

public void TooHigh()
{
    int numLies = 1;
    if ((itsUsersNumber - itsSecretNumber) &gt; 6)
    {
        itsLieNum = randy.nextInt(2);
        if(itsLieNum == 1 &amp;&amp; numLies == 1){
            numLies = 2;
            JOptionPane.showMessageDialog(null, "Too low.");}
        else
            numLies = 1;
            JOptionPane.showMessageDialog(null, "Too high.");
    }
}


I just want to know whether or not it seems like it would work fine. I would just test it, but it would probably take me quite a while to make sure that it not only works 1/3 of the time, but also that it doesn't do it twice in a row.

EDIT: I managed to get everything working fine with this code:

public void showUpdatedStatus()
{

    if(((itsUsersNumber - itsSecretNumber) &lt;= 2) &amp;&amp; ((itsUsersNumber -itsSecretNumber) &gt;= -2))
        JOptionPane.showMessageDialog(null, "You're hot!");
    else if (((itsUsersNumber - itsSecretNumber) &lt;= 6) &amp;&amp; ((itsUsersNumber -itsSecretNumber) &gt;= -6))
        JOptionPane.showMessageDialog(null, "You're warm.");
    if ((itsUsersNumber - itsSecretNumber) &lt; -6)
        JOptionPane.showMessageDialog(null, "Too low.");
    else 
        TooHigh();
}

public void TooHigh()
{
    if ((itsUsersNumber - itsSecretNumber) &gt; 6)
    {
        itsLieNum = randy.nextInt(3);
        if(canLie &amp;&amp; itsLieNum == 1){
            canLie = false;
            JOptionPane.showMessageDialog(null, "Too low.");}
        else{
            canLie = true;
            JOptionPane.showMessageDialog(null, "Too high.");}
    }
}


Thanks to rolfl
The concept you have going is 'OK' (cumbersome, but for a beginner it's OK). There are two bugs, and one recommendation that will help a lot.

First the recommendation....

Change numLies to be a boolean value like: boolean canlie = true;

Then, your code becomes:

if(canlie &amp;&amp; itsLieNum == 1){
    canlie = false;
    ....
} else {
    canlie = true;


This makes the purpose of the code more apparent. Also, a bug is that you have to declare this ourside your method. It should be a class-variable, not a method variable, otherwise it will always be the wrong value.

The bug you have is a technical one (but important that you learn) ... Random.nextInt(value) will never return the input value. It will retrun 0(inclusive) to value(exclusive). In your case, with nextInt(2) it will only ever return 0, or 1. Change that to be nextInt(3) and you will get the values 0, 1, or 2 and it will be 1 1 third of the time.