2014-07-09 80 views
-6

我正在学习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 + "?"); 
    } 
} 

假设输入是:约翰。

然后,输出将是:

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

在这里,我想约翰,而不是在输出零(2号线)。 但我不能。

如何访问与其他类(例如:Enemyu)相同的输入,除了设置了输入变量声明的类(例如:Playeri)?

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

请回答我的问题!

非常感谢!

编辑:对不起,在代码中不正确的缩进。

+0

在你的'Enemy'类中使用setter来设置对'Player'的引用,而不是初始化一个新的'Player'。 – Mena

+0

谢谢@Mena ... – user3820248

回答

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

+0

谢谢!我有另一个问题:而不是字符串,如果在处理代码时使用int进一步更改,int类型的变量的值是否会改变?静态不会改变它的属性来改变?例如: = - 1; – user3820248

+0

对不起......我不小心给了这个答案-1 :( – user3820248

+0

)对于'static'变量,无论是int还是string,总是可以使用它的类名从任何地方改变它,对于final变量,这是不可能的 –

0

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

void showName(String myName) { 

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

    } 

enem.showUserName(user.name); 

或者,你可以将它设置你的用户类的方式一样。

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

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 + "?"); 

    } 

} 
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"); 

授予您可能还需要提供你的类的overidden toString()方法(而你的情况是你showName)。不过,就你的情况而言,我认为这不是必要的。

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

+0

谢谢!我有另一个问题:而不是字符串,如果在处理代码时使用int进一步更改,int类型的变量的值是否会改变?静态不会改变它的属性来改变?例如: = - 1 – user3820248

+0

你会想在你的构造函数中创建一个“integer”值的字段,然后调用getters/setters来......设置并获取你需要的值! :D @ user3820248 –

相关问题