如何从main方法给另一个类的变量赋值?

时间:2014-07-09 13:15:41

标签: java

我正在学习Java,所以我想要简单易懂的答案。 当你看到下面的代码时,你会知道我的意思:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Playeri user = new Playeri();
        Enemyu enem = new Enemyu();
        Scanner input = new Scanner(System.in);

        user.name = input.nextLine();
        user.showName();
        enem.showUserName();
    }
}

class Playeri {

    String name;

    void showName() {
        System.out.println("Your name is " + name + ".");
    }
}

class Enemyu {

    Playeri enemUser = new Playeri();

    void showUserName() {
        System.out.println("Hey, bro! Are you " + enemUser.name + "?");
    }
}

假设输入是:John。

然后,输出将是:

Your name is John.
Hey, bro! Are you null?

在这里,我想在输出中使用John而不是null(第2行)。 但我不能。

如何访问其他类的相同输入(例如:Enemyu),然后是具有设置输入的变量声明的类(例如:Playeri)?

换句话说: 多个类如何通过main方法访问类中设置的相同变量值?

请回答我的问题!

非常感谢!

编辑:很抱歉代码中的缩进不正确。

4 个答案:

答案 0 :(得分:0)

您没有为对象的名称变量设置值。

 public static void main (String[] args) {

    Playeri user = new Playeri();

    Enemyu enem = new Enemyu();

    Scanner input = new Scanner(System.in);

    user.name = input.nextLine();

    user.showName();

    enem.showUserName();

    }

    }

    class Playeri {

        String name;

        void showName() {

        System.out.println("Your name is " + name + ".");
        Enemyu.enemUser.name=name; // Set it like this
        }

        }

        class Enemyu {

        static Playeri enemUser = new Playeri(); // make it static

        void showUserName() {

        System.out.println("Hey, bro! Are you " + enemUser.name + "?");

        }

        }

输出 -

John
Your name is John.
Hey, bro! Are you John?

这解决了您的问题,但建议您使用setter-getter方法。

答案 1 :(得分:0)

您可以将其作为参数传递给该方法。

void showName(String myName) {

    System.out.println("Your name is " + myName + ".");

    }

enem.showUserName(user.name);

或者,您可以按照用户类的方式进行设置。

或者,你可以在这种情况下使用mutators(setter / getters),set-method,或者将它作为参数传递给类的构造函数。

答案 2 :(得分:0)

以下是您的代码的固定版本。您遇到的问题是您创建了两个单独的Playeri实例,并且只在其中一个实例上设置了名称。此解决方案仅创建一个Playeri实例,从而绕过问题。

import java.util.Scanner;

public class Foo {

    public static void main (String[] args) {

        Playeri user = new Playeri();

        Enemyu enem = new Enemyu(user);

        Scanner input = new Scanner(System.in);

        user.name = input.nextLine();

        user.showName();

        enem.showUserName();

    }

}

class Playeri {

    String name;

    void showName() {

        System.out.println("Your name is " + name + ".");

    }

}

class Enemyu {

    Playeri enemUser;

    public Enemyu( Playeri p ) {
        this.enemUser = p;
    }

    void showUserName() {

        System.out.println("Hey, bro! Are you " + enemUser.name + "?");

    }

}

答案 3 :(得分:0)

Enemyu课程中为您的字段变量创建getterssetters

在Enemeyu里面......

private String name;

...

public void setName(String newName) {
    this.name = newName;
}

public String getName() {
    return this.name;
}

...

然后在你的主要方法内......

...

Enemyu enem = new Enemyu();
enem.setName("John");

当然,您可能还希望为您的班级提供一个重叠的toString()方法(在您的情况下是您的showName)。但是,在你的情况下;我不认为这是必要的。

您的问题是您从未在对象中设置name字段。