Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2020, 21:54   #1
RuSlaN_92
Новичок
Джуниор
 
Регистрация: 22.01.2020
Сообщений: 3
Вопрос Изучаю язык Java Первые трудности.

Здравствуйте.
Недавно начал изучать я зык Java, для этих цели купил книгу "Кэти Сьерра и Берт Бейтс Изучаем JAVA", и до этого момента у меня всё шло хорошо, пока не дошел до наследования классов. остановился на примере программы которая генерирует случайное число, которое, в свою очередь должны таким же случайным образом угадать участники. Привет кода указан ниже.
Класс: Player

public class Player {
int number = 0;
public void guess(){
number=(int)(Math.random()*10);
System.out.println("Думаю,это число " +number);
}
}

Класс: GusseGame

public class GuessGame {
Player p1;
Player p2;
Player p3;

public void startGame(){
p1 = new Player();
p2 = new Player();
p3 = new Player();

int guessp1=0;
int guessp2=0;
int guessp3=0;

boolean p1isRight = false;
boolean p2isRight = false;
boolean p3isRight = false;

int targetNumber=(int)(Math.random()*10 );
System.out.println("Я загадываю число от 0 до 9...");
System.out.println("Число которое нужно угадать - "+targetNumber);
while(true){


p1.guess();
p2.guess();
p3.guess();

guessp1=p1.number;
System.out.println("Первый игрок думает что это "+ guessp1);
guessp2=p2.number;
System.out.println("Второй игрок думает что это "+ guessp2);
guessp3=p3.number;
System.out.println("Третий игрок думает что это "+ guessp3);

if (guessp1 == targetNumber){
p1isRight = true;
}
if (guessp2 == targetNumber){
p2isRight = true;
}
if (guessp3 == targetNumber){
p3isRight = true;
}

if (p1isRight || p2isRight || p3isRight){
System.out.println("У нас есть победитель!");
System.out.println("Первый игрок угадал? " + p1isRight);
System.out.println("Второй игрок угадал? " + p2isRight);
System.out.println("Третий игрок угадал? " + p3isRight);
System.out.println("Конец игры!");
}
else {
System.out.println("Игроки должны попробовать ещё раз.");
}
}}}

Класс: GameLauncher

public class GameLauncher {
public static void main (String[]args){
GuessGame game = new GuessGame();
game.startGame();
}
}

По задумке авторов программа должна выводить подобный результат:
Я загадываю число от 0 до 9...
Число которое нужно угадать - 7
Думаю,это число 1
Думаю,это число 2
Думаю,это число 3
Первый игрок думает что это 1
Второй игрок думает что это 2
Третий игрок думает что это 3
Игроки должны попробовать ещё раз.
Число которое нужно угадать - 7
Думаю,это число 7
Думаю,это число 2
Думаю,это число 3
Первый игрок думает что это 7
Второй игрок думает что это 2
Третий игрок думает что это 3
У нас есть победитель!
Первый игрок угадал? true

Вместо этого программа впадает в бесконечный цикл, из-за не понимания этой ошибки я не могу двигаться дальше. Для написания программного кода использовал IntelliJ IDEA Community Edition 2019.1.3 x64
Вложения
Тип файла: rar MySekondApp.rar (11.9 Кб, 2 просмотров)
RuSlaN_92 вне форума Ответить с цитированием
Старый 25.01.2020, 14:51   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Давайте посмотрим. У вас бесконечный цикл while. Как с него выйти?
Я думаю если кто-то угадал число (1, 2, 3 игрок), то нужно остановить бесконечный цикл. Так?
Есть несколько способов, например break.
Код:
if (guessp1 == targetNumber){
p1isRight = true;
}
Игрок угадал, сделать его победителем и остановить цикл.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 27.01.2020, 18:30   #3
RuSlaN_92
Новичок
Джуниор
 
Регистрация: 22.01.2020
Сообщений: 3
По умолчанию

Спасибо большое я исправил и добавил break.
...
if (p1isRight | p2isRight | p3isRight){
System.out.println("У нас есть победитель!");
System.out.println("Первый игрок угадал? " + p1isRight);
System.out.println("Второй игрок угадал? " + p2isRight);
System.out.println("Третий игрок угадал? " + p3isRight);
System.out.println("Конец игры!");

break;
}...

Но есть вопрос! Когда программа выводит следующий результат:
...
У нас есть победитель!
Первый игрок угадал? false
Второй игрок угадал? true
Третий игрок угадал? false
Конец игры!...

Как сделать так чтобы она выводила только строчку с значением true, то есть:"Второй игрок угадал? true"?
RuSlaN_92 вне форума Ответить с цитированием
Старый 28.01.2020, 02:04   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Самое простое - разделить условие на три:
Код:
if (p1isRight | p2isRight | p3isRight){
Если первый выиграл, то вывод по первому игроку и т.д.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 28.01.2020, 21:03   #5
RuSlaN_92
Новичок
Джуниор
 
Регистрация: 22.01.2020
Сообщений: 3
По умолчанию

Мне не до конца понятно каким образом разделить? Так как код что с "|"-И и с "||"-ИЛИ, по результату не чем не отличаются:
...
if (p1isRight || p2isRight || p3isRight){
System.out.println("У нас есть победитель!");
System.out.println("Первый игрок угадал? " + p1isRight);
System.out.println("Второй игрок угадал? " + p2isRight);
System.out.println("Третий игрок угадал? " + p3isRight);
System.out.println("Конец игры!");

break;
}
...
...
if (p1isRight | p2isRight | p3isRight){
System.out.println("У нас есть победитель!");
System.out.println("Первый игрок угадал? " + p1isRight);
System.out.println("Второй игрок угадал? " + p2isRight);
System.out.println("Третий игрок угадал? " + p3isRight);
System.out.println("Конец игры!");

break;
}
...
Они выводят абсолютно одинаковый результат.
RuSlaN_92 вне форума Ответить с цитированием
Старый 30.01.2020, 23:25   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

А есть такая вероятность, что 2 игрока угадают число или все? Или никто)))
Вам нужно для каждого игрока проверять.
Код:
     if (p1isRight || p2isRight || p3isRight) {
         System.out.println("У нас есть победитель(ли)!");
         if (p1isRight) {
             System.out.println("Первый игрок угадал");
         }
         if (p2isRight) {
             System.out.println("Второй игрок угадал");
         }
         if (p3isRight) {
             System.out.println("Третий игрок угадал");
         }
     } else {
         System.out.println("Победителей нет =(");
     }
    System.out.println("Конец игры!");
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 17.03.2020, 12:24   #7
Muhammadjon
Новичок
Джуниор
 
Регистрация: 02.03.2020
Сообщений: 3
По умолчанию

надо выйти из без конечного цыкла
Muhammadjon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java: Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Заменить первые три строки массива A vikysha55 Помощь студентам 1 16.04.2014 10:50
Изучаю язык запросов 1С. Первый же запрос не работает so1idsnake Помощь студентам 5 16.08.2013 15:36
Первые трудности с программированием на C ol-k_34 Общие вопросы C/C++ 18 23.02.2012 08:51
Java как первый язык. alondrealit Свободное общение 21 16.12.2011 21:24
C# и Java трудности. LaiQue Общие вопросы .NET 0 24.04.2010 15:50