Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何给另一个类的变量一个main方法的值?_Java - Fatal编程技术网

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

Java 如何给另一个类的变量一个main方法的值?,java,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

我正在学习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方法访问在一个类中设置的相同变量值

请回答我的问题

非常感谢


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

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

 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方法。

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

void showName(String myName) {

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

    }

或者,您可以像对用户类那样进行设置


或者,在本例中,您可以使用mutators(setters/getter),即set方法,或者将其作为参数传递给类的构造函数。

这里是您的代码的固定版本。您遇到的问题是,您创建了两个单独的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 + "?");

    }

}

Enemyu
类中,为字段变量创建
getter
setters

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");
然后在主方法内部…

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
)。然而,在你的情况下;我认为那没有必要


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

敌方
类中使用setter设置对
玩家
的引用,而不是初始化新的
玩家
。谢谢!我还有另一个问题:如果使用int而不是string,则在处理代码时会进一步更改int类型变量的值吗?static不会更改其属性以进行更改吗?例如:=-1;很抱歉我无意中给出了这个答案-1:(对于
静态
变量,无论它是int还是string,总是可以使用它的类名从任何地方更改它。对于
最终
变量,一旦给它赋值就不可能了。非常感谢!我很乐意给你+1!编辑你的答案,这样我就可以给你+1:)谢谢!我还有一个问题:如果使用int而不是string,那么在处理代码时会进一步更改int类型变量的值吗?static不会更改其属性吗?例如:=-1您希望在构造函数中创建一个
integer
value字段,并调用
getters/setters
to…好吧,设置并获取所需的值!:D@user3820248