3

ユーザーがチーム名を入力できるコードを作成しようとしています。これが私のコードです:

public class Team {
    public String name;

    public static void main(String[] args) {
        System.out.println("Enter name team");
        Scanner tn = new Scanner(System.in);
        name = tn.nextLine();     
    }
}

「非静的変数名は静的コンテキストから参照できない」ということは理解しました。メインから「静的」を取り除けば機能することはわかっていますが、

a)「静的」を取り出さずに参照するにはどうすればよいですか?

b)ユーザーの入力を取得して変数「名前」に直接割り当てる方法はありますか?

Scanner tn = new Scanner(System.in);
name = tn.nextLine(); 

基本的な質問は知っていますが、私はまだ初心者です! どうもありがとう、マイル

4

5 に答える 5

4

nameチーム名です。Teamしたがって、新しいオブジェクトをインスタンス化し、その名前を設定する必要があります。

public static void main(String[] args) {
    System.out.println("Enter name team");
    Scanner tn = new Scanner(System.in);
    Team team = new Team();
    team.name = tn.nextLine();     
}
于 2013-09-11T05:00:44.797 に答える
4

staticnon-static/instance変数はオブジェクトの作成時にメモリ内で初期化されるため、メソッドは非静的変数を直接使用することを許可しません。したがって、クラスのオブジェクトを作成してから変数を使用する必要があります。次のようにします。

Team teamObj = new Team();
//now access name variable using teabObj instance
teamObj.name = tn.nextLine();    
于 2013-09-11T05:01:21.497 に答える
2

次のようにリフレクションを使用して、その非静的フィールドにアクセスできます。

    System.out.println("Enter name team");
    Scanner tn = new Scanner(System.in);
    Team team=new Team();
    Field field=Team.class.getField("name");
    field.set(team,tn.next());
    System.out.println((String) field.get(team));

リフレクションのライブデモ。

または、次のように試すこともできます。

   Team team = new Team();
   team.name = tn.nextLine();   

ライブデモ

于 2013-09-11T05:02:32.160 に答える
0

必要に応じて、Team オブジェクトを作成します。

Team team = new Team();
team.name = tn.nextLine();
于 2013-09-11T04:59:20.870 に答える
0

静的メソッド/変数はクラスにバインドされています。非静的変数にはアクセスできません (メソッドを呼び出す必要があるクラスのインスタンスがわかりません)。オブジェクトを作成してから、非静的メソッドを呼び出す必要があります。

于 2013-09-11T06:48:33.057 に答える