Kunal Rishi
Kunal Rishi

Reputation: 23

Java code for guessing game not printing anything

So I have a Computer Science course at school in which we learn Java. We were assigned to do a simple text based recreation of the guessing game. I got it done until this point, and I cannot seem to find where I messed up because there is nothing printed when I run the core.

This is the code:

    public class GuessGame 
{
  public static void main(String[] args) 
  { 
    new GuessGame();
  }  
  public GuessGame () 
  { 
    char end = 'y';
    while (end!='y')
    {
      System.out.println ("Welcome to the Guessing Game!");
      System.out.println ("\nThe computer has picked a number");
      System.out.println ("between 1 and 100. Try to guess it.");
      int num = (int)(Math.random()*(100-1)+1);
      int guess = IBIO.inputInt ("Guess the number: ");
      if (guess==num)
        System.out.println ("You got it!");
      else if (guess>num)
        System.out.println ("That is too high.");
      else
        System.out.println ("That is too low.");
      end = IBIO.inputChar ("Exit game? (y/n)");
    }
  }
}

By the way, IBIO is a class provided by my IB program that we use to make Input/Output statements.

This is IBIO.java:

    public class IBIO
{
    static void output (String info)
    {
 System.out.println (info);
    }


    static void output (char info)
    {
 System.out.println (info);
    }


    static void output (byte info)
    {
 System.out.println (info);
    }


    static void output (int info)
    {
 System.out.println (info);
    }


    static void output (long info)
    {
 System.out.println (info);
    }


    static void output (double info)
    {
 System.out.println (info);
    }


    static void output (boolean info)
    {
 System.out.println (info);
    }


    static String input (String prompt)
    {
 String inputLine = "";
 System.out.print (prompt);
 try
 {
     inputLine = (new java.io.BufferedReader (new java.io.InputStreamReader (System.in))).readLine ();
 }
 catch (Exception e)
 {
     String err = e.toString ();
     System.out.println (err);
     inputLine = "";
 }
 return inputLine;
    }


    static String inputString (String prompt)
    {
 return input (prompt);
    }


    static String input ()
    {
 return input ("");
    }


    static int inputInt ()
    {
 return inputInt ("");
    }


    static double inputDouble ()
    {
 return inputDouble ("");
    }


    static char inputChar (String prompt)
    {
 char result = (char) 0;
 try
 {
     result = input (prompt).charAt (0);
 }
 catch (Exception e)
 {
     result = (char) 0;
 }
 return result;
    }


    static byte inputByte (String prompt)
    {
 byte result = 0;
 try
 {
     result = Byte.valueOf (input (prompt).trim ()).byteValue ();
 }
 catch (Exception e)
 {
     result = 0;
 }
 return result;
    }


    static int inputInt (String prompt)
    {
 int result = 0;
 try
 {
     result = Integer.valueOf (input (prompt).trim ()).intValue ();
 }
 catch (Exception e)
 {
     result = 0;
 }
 return result;
    }


    static long inputLong (String prompt)
    {
 long result = 0;
 try
 {
     result = Long.valueOf (input (prompt).trim ()).longValue ();
 }
 catch (Exception e)
 {
     result = 0;
 }
 return result;
    }


    static double inputDouble (String prompt)
    {
 double result = 0;
 try
 {
     result = Double.valueOf (input (prompt).trim ()).doubleValue ();
 }
 catch (Exception e)
 {
     result = 0;
 }
 return result;
    }


    static boolean inputBoolean (String prompt)
    {
 boolean result = false;
 try
 {
     result = Boolean.valueOf (input (prompt).trim ()).booleanValue ();
 }
 catch (Exception e)
 {
     result = false;
 }
 return result;
    }
}

Sorry for the lengthy question. Im new to Java.

Upvotes: 0

Views: 160

Answers (4)

something-not-here
something-not-here

Reputation: 3

You initialize the variable char end with value 'y'.

char end = 'y';

Then the condition for your loop is

while (end!='y')

This condition is never fulfilled, that's why it's out of the loop. Change the initial value of the variable end.

Upvotes: 0

Jean-François Savard
Jean-François Savard

Reputation: 21004

The problem is that you will never enter the initial loop

char end = 'y';
while (end!='y')

You instantiate end to y, then enter only if end is not y which will always be false, hence never enter the loop.

Simply change the default value of end

char end = 'n';

Also, you don't have to cast the value 0 in your IBIO class

result = (char) 0;

You can simply do result = 0 and it will take the ASCII value.

I would also declare num and guess outside of the loop to avoid re-declaring them each time, as you did for end.

Finally, instead of declaring 7 output method with different paremeter type which simply do a System.out.println of the received parameter I would directly call System.out.println(value).

I would apply the same logic for all other methods that only call one method with the received parameter.

Upvotes: 1

Lunster
Lunster

Reputation: 906

These two lines clearly contradict each other, the while loop will never execute. Initialize end to be a different value.

char end = 'y';

while (end!='y')

Upvotes: 0

The computer is doing exactly what you told it to. When GuessGame's constructor runs:

  1. Declare end as a char local variable and initialise it to contain 'y':

    char end = 'y';
    
  2. Run the loop body while end does not contain 'y':

    while (end!='y')
    

    (since end does contain 'y' it does not run the loop body; it skips to the code after the loop).

Upvotes: 1

Related Questions