我正在学习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方法访问类中设置的相同变量值?
请回答我的问题!
非常感谢!
编辑:很抱歉代码中的缩进不正确。
答案 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
课程中为您的字段变量创建getters
和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");
当然,您可能还希望为您的班级提供一个重叠的toString()
方法(在您的情况下是您的showName
)。但是,在你的情况下;我不认为这是必要的。
您的问题是您从未在对象中设置name
字段。