-1

Creating a program where a random number is generated using math.random which i have put into a function and called this function in the program to make things tidier but the random number that gets outputted is always what the integer secret_number is set to, and i am not sure how to fix this to create a random number. I would like to keep the math.random in the function and use parameters

package guessinggame3;
import java.util.Scanner; //imports scanner to read from keyboard
import java.util.ArrayList;


public class GuessingGame3 { //start of public class

static Scanner kboard = new Scanner(System.in); //calls scanner 


public static void main(String args[]) //start of main 
{

System.out.println("Welcome to the guessing game, the computer will 
generate a random number that you have to guess, good luck!"); //opening 
message explaining how to play 

int secret_number = 0;
int number_of_guesses = 0;
int user_guess ;
ArrayList<Integer> entered_numbers = new ArrayList<Integer>();


generate_random_number(secret_number); //calls he function 
generate_random_number to say the random number has been generated 




for(int i=0; i<20;i++) { // start of for loop sets user attempts to 20


System.out.println("Please make your guess"); //asks user to enter make 
their guess             
user_guess = kboard.nextInt();
number_of_guesses++; // adds on to the counter after each user guess


if(entered_numbers.contains(user_guess)) //checks if entered number = 
number stored in array
{
System.out.println("You have already entered this number"); //displays 
error message if user enters same number again
continue;
}

else 
{
entered_numbers.add(user_guess);
if (user_guess == secret_number)
System.out.println("Your guess is corret you win!");
}

if (user_guess < secret_number)
{
System.out.println("Guess is too low");
}

if (user_guess > secret_number) 
{
System.out.println("Your guess is too high");
}


System.out.println (20 - number_of_guesses + " Guesses remaining"); 
//Tells the user how many guesses they have remaining 


} //end of for loop

} //end of main

static void generate_random_number(int secret_number)  //start of function 
generate_random_number function passing secret_number as a parameter
{       
secret_number = (int)(Math.random()*100) + 1; //generates random number 
between 0 and 100
System.out.println("The computer has generated it's number"); //lets the 
user know that the random number has been generated
} //end of function generate_random_number

} //end of public class

rxeqz
  • 13
  • 2
  • 1
    Reassigning a parameter's value doesn't change its value at the call-site, Java doesn't work that way – JonK May 31 '19 at 11:03
  • Please lose all those useless comments. They are clutter that makes your code harder to read without adding useful information. – duffymo May 31 '19 at 13:23
  • The new programmer is unlikely to understand why pass by value matters here. A better suggestion is to change the method signature to public int generateSecretNumber() { return (int) (Math.random()*100.0); } – duffymo May 31 '19 at 13:27

2 Answers2

0

When you pass secret_number to the function generate_random_number, secret_number is copied. Thus, when you assign secret_number to (int)(Math.random()*100) + 1 inside your function, you are just changing its copy.

Lev Leontev
  • 2,538
  • 2
  • 19
  • 31
0

You should change your methods return type to int. Change your method like this:

static int generate_random_number(int secret_number) 

And in the main function set your secret_number to the value that method returns

secret_number = generate_random_number(secret_number);

You should also add return value for your method so it should be like this:

static int generate_random_number(int secret_number){       
    secret_number = (int)(Math.random()*100) + 1;
    System.out.println("The computer has generated it's number");
    return secret_number;
}
Mertcan Seğmen
  • 903
  • 2
  • 11
  • 26
  • Thanks for the comment but now i get an error saying secret_number has not been initialized and the method must return a type of int? – rxeqz May 31 '19 at 11:27
  • I think you changed the wrong lines. Keep `int secret_number = 0;` the same, change `generate_random_number(secret_number);` with `secret_number = generate_random_number(secret_number);` – Mertcan Seğmen May 31 '19 at 11:40
  • And also add `return secret_number;` at the end of your `generate_random_number` method, sorry i forgot to add that – Mertcan Seğmen May 31 '19 at 11:43
  • Thank you for the help this has fixed my problem :) – rxeqz May 31 '19 at 11:50