Функция вызывается несколько раз - PullRequest
0 голосов
/ 01 февраля 2019

При попытке кодирования текстовой игры и при запросе ввода класса GameSettings, функция вызывается 3 раза.Я пытаюсь отправить код назад и вперед между классами, причина, по которой я использую разные классы, чтобы сделать код немного более чистым, чтобы при отправке monsterHealth ... и т. Д. Он был читабельным.

Game.Java

package src;

import java.io.IOException;

public class Game {

public static void main(String[] args) throws IOException { 

    GameSettings GameSettings = new GameSettings();
    GameSettings.init();


//  GameSettings.Classes();

    GameSettings.StartLogic();

    if (src.GameSettings.Classes().equals("mage")) {
        System.out.println("mage"); 
    }
    else if (src.GameSettings.Classes().equals("warrior")) {
        System.out.println("warrior");  
    }
    else if (src.GameSettings.Classes().equals("archer")) {
        System.out.println("archer");   
    }
    else {
        System.out.println("Non valid");

    }
}
}

GameSettings.Java

package src;
 import java.util.Scanner;
 public class GameSettings extends Game {

public interface classChoice {

}
public int playerHp;
private static Scanner scanner;
private static String nameInput;
private static String classChoice;

private String mage;
private String archer;
private String warrior;

public void init() {
scanner = new Scanner(System.in);

    System.out.println("Welcome To Fizzle's Text Based RPG\nWhat Is Your 
    Name?");
    nameInput = scanner.nextLine(); 
}
    public static String Classes() {
    System.out.println("Welcome " + nameInput + " What Class Would You Like 
    To Be?\n(mage)\n(warrior)\n(archer)");
    classChoice = scanner.nextLine();

    return classChoice;

}

public void StartLogic() {
    playerHp = 10;
    System.out.println(classChoice);    


}


 }

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Привет Fizzle!:)

Пожалуйста, уточните свой вопрос.Я добавил несколько комментариев к вашему коду:

Game.java

import java.io.IOException;

public class Game {

    public static void main(String[] args) throws IOException {

        GameSettings GameSettings = new GameSettings();
        GameSettings.init();

        GameSettings.StartLogic(); //returns null

        if (GameSettings.Classes().equals("mage")) {
            System.out.println("mage");
        } else if (GameSettings.Classes().equals("warrior")) {
            System.out.println("warrior");
        } else if (GameSettings.Classes().equals("archer")) {
            System.out.println("archer");
        } else {
            System.out.println("Non valid");

        }

    }
}

GameSettings.java

import java.util.Scanner;

public class GameSettings extends Game {

    //why did you declare an Interface?
    public interface classChoice {

    }

    public int playerHp;
    private static Scanner scanner;
    private static String nameInput;
    private static String classChoice;

    public void init() {
        scanner = new Scanner(System.in);
        System.out.println("Welcome To Fizzles Text Based RPG What Is Your Name?");
        nameInput = scanner.nextLine();
    }

    public static String Classes() {
        System.out.println("Welcome " + nameInput + " What Class Would You Like To Be?\n(mage)\n(warrior)\n(archer)");
        classChoice = scanner.nextLine();

        return classChoice;

    }

    //why are you calling this method beforehand?
    public void StartLogic() {
        playerHp = 10;
        System.out.println("Your Class:" + classChoice);

    }

}
0 голосов
/ 01 февраля 2019

Я вижу вашу проблему.В

 GameSettings.StartLogic();

    if (src.GameSettings.Classes().equals("mage")) {
        System.out.println("mage"); 
    }
    else if (src.GameSettings.Classes().equals("warrior")) {
        System.out.println("warrior");  
    }
    else if (src.GameSettings.Classes().equals("archer")) {
        System.out.println("archer");   
    }
    else {
        System.out.println("Non valid");

    }

Вы вызываете метод GameSettings.Classes (). Equals () три раза.Вместо этого определите переменную String перед блоком if / else следующим образом:

 GameSettings.StartLogic();

    String input = src.GameSettings.Classes();

    if (input.equals("mage")) {
        System.out.println("mage"); 
    }
    else if (input.equals("warrior")) {
        System.out.println("warrior");  
    }
    else if (input.equals("archer")) {
        System.out.println("archer");   
    }
    else {
        System.out.println("Non valid");

    }

Это потому, что при использовании оператора if / else вы не должны вызывать методы, которые полагаются наудачи или пользовательский ввод внутри оператора, но заранее определите их как переменные и передайте их в качестве аргументов в оператор if / else.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...