Булевый метод, вызванный из другого метода - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь выполнить sh небольшую игру на java. Эта игра основана на многих методах. Первый метод, логический, который дает мне истину или ложь в зависимости от того, достаточно ли у меня жизней в моей игре.

public boolean removeLive(){
    this.wastedLives++;
    if(this.wastedLives == this.lives) {
        restingLives=false;
        System.out.println("GAME OVER");
    }
    if(this.wastedLives < this.lives) {
        restingLives=true;
    }
    return restingLives;
}

Так что, если я создаю экземпляр вызова для этого метода, он делает то, что должен делать, потому что в другой метод (CalculayLives) я достигаю значение life = startLives-wastedLives;

Итак, теперь мне нужно разработать другой метод, который генерирует случайное число, и я должен угадать.

public void Play() {
    super.rebootGame(); 
    boolean continue=true;
    System.out.println("Choose a number between 1 &100: ");
    this.myNumber=Integer.parseInt(sc.nextLine()); 
    while(this.myNumber < 1 || this.myNumber > 100) {
        System.out.println("Choose again a number between the range");
        this.myNumber=Integer.parseInt(sc.nextLine());
    }
    this.randomN = generateRandomNumber();//Method that generate the random number (int)(Math.random()*100)+1;
    setStartingLives(5);
    while (continue == true && removeLive() == true) {
        if (this.myNumber == this.randomN) {
            System.out.println("U WIN!!");
            refreshRecord();
            continue = false;
        } else {
            removeLive();
            if(continue == true && removeLive() == true) {
                if(this.myNumber > this.randomN) {
                    System.out.println("U have too find a lower number");
                } else {
                    System.out.println("U have too find a higher number");
                }
                this.myNumber = Integer.parseInt(sc.nextLine());
            }                          
        }   
    }
}

Проблема в том, что первый метод, логический, кажется, не вызывается, и я не знаю почему. Потому что я задаю Начальные жизни и каждый раз запрашиваю удалить Live, я не угадаю случайное число.

Заранее спасибо и извините за плохой перевод.

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Следуя философии Stack Overflow, согласно которой это место не только для написания правильного ответа, но и для обучения новых программистов, я пишу заметку, которая должна помочь вам решить вашу проблему. Даже после исправления этих ошибок вам нужна дополнительная помощь, не стесняйтесь комментировать, и я буду стараться изо всех сил.

1. Никогда не следует использовать ключевое слово Java в качестве имени переменной, например, присвоение имени переменная как continue неверна. Переименуйте его как-нибудь еще, например cont.

2. Вы должны соблюдать Java соглашение об именовании например, имя метода, Play должно быть play. Хотя это никак не повлияет на вашу программу, ваш учитель / экзаменатор вычтет некоторые оценки за несоблюдение соглашения.

3. Следующая конструкция кода - неправильный способ выполнения того, что Вы хотите сделать:

System.out.println("Choose a number between 1 &100: ");
this.myNumber=Integer.parseInt(sc.nextLine()); 
while(this.myNumber<1 || this.myNumber>100) {
    System.out.println("Choose again a number between the range");
    this.myNumber=Integer.parseInt(sc.nextLine());
}

Сделайте это следующим образом:

do {
    System.out.println("Choose a number between 1 &100: ");
    this.myNumber=Integer.parseInt(sc.nextLine()); 
} while(this.myNumber<1 || this.myNumber>100);

4. Лучший способ написания следующего кода:

while (cont == true && removeLive() == true)

- это

while (cont && removeLive())

Обратите внимание, что это всего лишь рекомендация, и она не окажет никакого влияния на вашу программу.

5. Обратите внимание, что вы звоните removeLive() два раза в коде, приведенном ниже, в то время как вы, вероятно, намеревались вызвать его только один раз

} else{
    removeLive();
    if(continue==true&&removeLive()==true){
        //...
    }
    //...
}
0 голосов
/ 21 марта 2020

Ладно, я немного тупой из-за CoVid19, так что слишком много наших людей перед экраном до сих пор помогают иметь ясный разум.

1-й, первый IF чуть ниже 2-го, пока нужен другой условие, потому что без него оно будет на бесконечном l oop.

while (continue==true&&removeLive()==true){
            if (this.myNumber==this.randomN){
                System.out.println("U WIN!!");
                refreshRecord();
                continue=false;
            } else{
                removeLive();
                if(continue==true&&removeLive()==true){
                    if(this.myNumber>this.randomN){
                    System.out.println("U have too find a lower number");
                    }
                    else{
                    System.out.println("U have too find a higher number");
                    }
                    this.myNumber=Integer.parseInt(sc.nextLine());
                }                          
            }   

И оно должно иметь другое, если или иначе, конечное значение sh l oop.

while (continue==true&&removeLive()==true){
            if (this.myNumber==this.randomN){
                System.out.println("U WIN!!");
                refreshRecord();
                continue=false;
            } else{
                removeLive();
                if(continue==true&&removeLive()==true){
                    if(this.myNumber>this.randomN){
                    System.out.println("U have too find a lower number");
                    }
                    else{
                    System.out.println("U have too find a higher number");
                    }
                    this.myNumber=Integer.parseInt(sc.nextLine());
                }                          
            }   **if(super.getRestingLives()==false){
                      continue==false;
                    }**

Второе, что я пропустил. Мой логический метод возвращает мне логическое значение, но каждый вызов, который я сделал, также отдыхает вживую. Поэтому мне нужен метод получения, чтобы получить значение логического

public boolean getRestingLives(){
        return restingLives;
    }

И третье, и не менее важное, это то, что я сделал неправильный вызов super.parameters. Поэтому я добавил правильный вызов

        super.setStartingLives(this.startLives);
    super.calculateRestingLives(super.getStartingLives());

Извините, что перепутал темы, но иногда необходимо задавать вопросы, чтобы получить ваши собственные ответы.

...