Java : 如何在方法中创建一个对象并在整个class中使用它?

Java : How to create an object in a method and use it throughout the class?

public void setupPlayers() {
    System.out.println("Would you like the Code Maker to be Human or CPU? :");
    String input = mySc.next();
    if (input == "Human") {
        Player CodeMaker = new Human();
    }
    else {
        Player CodeMaker = new CPU();  
    }

public void exampleUse() {
    CodeMaker.getCode();
}

所以我是 Java 的新手,甚至不确定是否可以开始。上面的代码都在一个class里面。 Human 正在实现接口 Player。我想在方法 setupPlayers 中使用 class Human 创建一个对象 CodeMaker,然后在方法 exampleUse 中使用该对象。有没有办法做到这一点?如果没有,谁能想到任何替代方案?干杯。

您可以将 Player 对象存储为实例变量:

Player CodeMaker = null;

public void setupPlayers() {
    System.out.println("Would you like the Code Maker to be Human or CPU? :");
    String input = mySc.next();
    if (input == "Human") {
        CodeMaker = new Human();
    }
    else {
        CodeMaker = new CPU();  
    }

}

public void exampleUse() {
    CodeMaker.getCode();
}

只需创建 class 的成员:private Human CodeMaker; 并在构造函数中初始化它 CodeMaker = new Player();

不要这样做 Player CodeMaker = new Human(); - 这会给你一个错误,因为你不能创建接口对象。

创建一个class字段变量(私有的,为了更好的封装)并使用"string".equals(object)来检查字符串相等性(How do I compare strings in Java?)。

private Player codeMaker;

public void setupPlayers() {
    System.out.println("Would you like the Code Maker to be Human or CPU? :");
    String input = mySc.next();
    if ("Human".equals(input)) {
        codeMaker = new Human();
    }
    else {
        codeMaker = new CPU();  
    }
}

public void exampleUse() {
    codeMaker.getCode(); // you need to define a return or consumption HERE
}

也许你应该像这样将 input = mySc.next() 包装在 try/catch 中,因为输入读取会抛出异常。

[...]

String input = null;
try {
  input = mySc.next();
}
catch(Exception ex) {
  throw ex;
}
if ("Human".equals(input) {
    codeMaker = new Human();
}

[...]

我认为您的意思一定是 Player 是界面。请记住,如果你想比较字符串,你应该使用 equals 方法而不是 == 运算符。

public class ClassName{
    private Player codeMaker;

    public void setupPlayers() {
        System.out.println("Would you like the Code Maker to be Human or CPU? :");
        String input = mySc.next();
        if (input.equals("Human")) {
            codeMaker = new Human();
        }
        else {
            codeMaker = new CPU();  
        }
    }

    public void exampleUse() {
         codeMaker.getCode();
    } 
}

请考虑学习创建设计模式。 Java 的文化侧重于组织和良好的架构。您一定会对设计模式可以给您的世界感到惊讶。