Cannot find symbol volverjugar - он не допускает, что переменная
себе должна Ошибка porquГ© в ningГєn момент, ты объявил идентификатора volverjugador
, а именно, составитель никогда это reconocerГЎ и поэтому razГіn у тебя не выходит эта ошибка compilaciГіn.
возможная Одна soluciГіn, он состоит в том, чтобы объявлять переменную volverjugar
(deberГ - чтобы быть типа string
) как помещение в начале mГ©todo main
.
Таким образом, составитель не deberГ, - чтобы посылать ningГєn ошибку синтаксиса; однако, ты cГіdigo у него есть несколько недостатков:
1. В этой части cГіdigo ocurrirГЎ возможный бесконечный цикл:
do{
Scanner teclado = new Scanner(System.in);
System.out.print("Introduce numero: ");
numero = teclado.nextInt();
System.out.println(numero);
cont++;
} while (numero != rand );
, Если ты замечаешь, cГіdigo наверху он seguirГЎ прося informaciГіn пользователя до тех пор, пока он не введет информацию в компьютер nГєmero правильно. Проблема укореняется в том, что мы не знаем в том, что момент coincidirГЎ nГєmero введенный в компьютер пользователем, со стоимостью, у которой есть rand
. PodrГ, - чтобы быть в 10 попытках, в 1000 попытках. Чтобы предотвращать этот недостаток, podrГ-хозяева распределять ему один lГ-mite ввода информации nГєmeros (например, 5
попыток), таким образом, мы делаем игру mГЎs интерактивный с пользователем.
В cГіdigo quedarГ - в asГ-:
do{
System.out.print("Introduce numero: ");
numero = teclado.nextInt();
cont++;
//Cuando el usuario haga 5 intentos, el bucle finaliza.
if(cont == 6) break;
}while (numero != rand );
2. В этой части cГіdigo estГЎs сравнивая ссылки:
}while (volverjugar != "si" );
cГіdigo наверху того, что harГЎ состоит в том, чтобы сравнивать ссылки на объекты, а именно, ocurrirГЎ бесконечный цикл, благодаря тому, что, ссылки (адреса памяти) не serГЎn ты был равен.
возможная Одна soluciГіn, - используя mГ©todo equalsIgnoreCase из класса String
.
Тогда, с этим mГ©todo мы сможем сравнивать цепи безопасной формы, если пользователь введет SI
или si
в компьютер, mГ©todo retornarГЎ true
и harГЎ, который игра начала снова. Если пользователь вводит в компьютер, что NO
или no
, devolverГЎ false
и это harГЎ, который цикл закончил (porquГ© условная не cumplirГЎ и поэтому, цикл ломает).
}while(volverjugar.equalsIgnoreCase("si") == true);
3. Не необходимо создавать в каждый iteraciГіn объекты типа Scanner
.
Эстар создавая объекты типа Scanner
, Гєnico, которой ты добивался, состоит в том, чтобы давать mГЎs процессы пересборщик мусора из Java, благодаря тому, что, в каждый repeticiГіn, deberГЎ размещать память dinГЎmicamente для объекта и шага, искать точный момент, чтобы освобождать память.
Способ это оптимизировать, - сохраняя ссылку объекта типа Scanner
в начале mГ©todo main
.
cГіdigo завершил, с осуществленными изменениями, quedarГ - в, таким образом:
import java.util.*;
public class Program
{
public static void main(String[] args)
{
Scanner teclado = new Scanner(System.in);
Random random = new Random();
int rand = random.nextInt();
int numero;
int cont = 0;
String volverjugar;
do{
do{
System.out.print("Introduce numero: ");
numero = teclado.nextInt();
cont++;
if(cont == 6) break;
}while (numero != rand );
System.out.println("Intentos partida:" + cont);
//Esto limpia el bufer del teclado
teclado.nextLine();
//¿Volver a jugar?
System.out.println("Volver a jugar?(si/no): ");
volverjugar = teclado.nextLine();
cont = 0;
}while(volverjugar.equalsIgnoreCase("si") == true);
}
}
Эта lГ-nea cГіdigo:
teclado.nextLine();
//¿Volver a jugar?
Ло Гєnico, который делает, состоит в том, чтобы отлаживать bГєfer клавиатуры. Это необходимо porquГ©, как llamГі в mГ©todo nextInt
(класса Scanner
), dejarГЎ bГєfer грязный (с разрывом lГ-nea) и это должно отлаживать это, иначе, когда ты захочешь попросить пользователя, который, если он хочет вернуться, сыграв или нет, не pausarГЎ программа и как volverjugar
valdrГЎ \n
, harГЎ, что условная: volverjugar.equalsIgnoreCase("si") == true
dГ© как результат false
, способствуя тому, чтобы игра закончилась без того, чтобы пользователь взял ее decisiГіn того, чтобы выходить.
Чтобы подбирать String с Scanner ты должен использовать método nextLine () .
AdemÃ: s, когда ты спрашиваешь о консоли System.out.print ln ("Â: Вновь играть? (s/n):") обрати внимание, что он с ln , для того, чтобы разрыва линии и взял ввод teclado.nextLine () . As¦-:
public static void jugarPartida(){
Scanner teclado = new Scanner(System.in);
System.out.println("¿Volver a jugar? (s/n):");//es print con ln
volverjugar = teclado.nextLine();
System.out.println(volverjugar);
}
Я Должен señalar, что método из-за mÃ: s, что ты функционировал, не делается as¦-. Сначала, который Scanner не инициализирует внутри método, так как каждый раз, когда он назвался éste crearÃ: новый объект Scanner. Después, который нужно использовать внутри цикла для того, чтобы повторился acci¦n играть пока volverjugar стоил s