Создание программы, в которой случайное число генерируется с использованием math.random, которое я поместил в функцию и вызвал эту функцию в программе, чтобы сделать вещи более аккуратными, но выводимое случайное число всегда равно тому, на что установлено целое число secret_number, и я я не уверен, как исправить это, чтобы создать случайное число. Я хотел бы сохранить math.random в функции и использовать параметры
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
} //конец общедоступного класса
Пожалуйста, удалите все эти бесполезные комментарии. Это беспорядок, который затрудняет чтение кода без добавления полезной информации.
Начинающий программист вряд ли поймет, почему здесь важна передача по значению. Лучшее предложение — изменить сигнатуру метода на public int generateSecretNumber() { return (int) (Math.random()*100.0); }




Когда вы передаете secret_number функции generate_random_number, secret_number копируется. Таким образом, когда вы присваиваете secret_number значение (int)(Math.random()*100) + 1 внутри своей функции, вы просто меняете ее копию.
Вы должны изменить тип возвращаемого значения ваших методов на int. Измените свой метод следующим образом:
static int generate_random_number(int secret_number)
И в основной функции установите свой secret_number на значение, которое возвращает метод
secret_number = generate_random_number(secret_number);
Вы также должны добавить возвращаемое значение для вашего метода, чтобы оно было таким:
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;
}
Спасибо за комментарий, но теперь я получаю сообщение об ошибке, говорящее, что secret_number не был инициализирован, и метод должен возвращать тип int?
Я думаю, вы изменили неправильные строки. Оставьте int secret_number = 0; прежним, замените generate_random_number(secret_number); на secret_number = generate_random_number(secret_number);
А также добавьте return secret_number; в конце вашего метода generate_random_number, извините, я забыл добавить это
Спасибо за помощь, это решило мою проблему :)
Переназначение значения параметра не меняет его значение на месте вызова, Java так не работает