Java 如何给另一个类的变量一个main方法的值?
我正在学习Java,所以,我想要简单易懂的答案。 当你看到下面的代码时,你就会明白我的意思: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
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