2

私は2つのクラスを持っています。最初のものでは、 を使用しScannerてユーザーの名前を取得し、それをString呼び出された に格納しましたname。次に、新しいクラスを開始し、出てきたものを印刷したいのですが、どうすればよいでしょうか。例としてこのコードを書き上げたので、私が何を尋ねようとしているのかがわかります。両方のクラスを投稿します。

import java.util.Scanner;

public class One {
    public static void main(String[] args) {

        String name;
        String start;
        Scanner input = new Scanner(System.in);

        System.out.println("Hello, what is your name?");
        name = input.nextLine();

        System.out.println("Hello "+name+", welcome! To ocntinue, please hit any key.");
        start = input.nextLine();

        if(start != null){
            Two object = new Two();
        }

    }
}

セカンドクラス。

public class Two {
    public Two() {
        System.out.println("Ok "+One.name+", lets start!");
    }
}
4

5 に答える 5

5

したがって、おそらく次のようなことをするでしょう: -

class One
{
  private String name = "bob";

  public String getName()
  {
    return name;
  }

  public static void main(String [] args)
  {
    One one = new One();
    Two two = new Two(one);

    // You could also just pass an r-value to Two, as in, Two(new One()) if you
    // never require 'one' again
  }
}

class Two
{
  public Two(One one)
  {
    System.out.println("Ok " + one.getName() + ", lets start!");
  }
}

何が起こっている?

  1. mainエントリ ポイント メソッドで 2 つのクラスを作成します。
  2. のインスタンスをOneコンストラクターに渡すTwo
  3. 2 つのその後の呼び出しgetName()

他の人が示唆しているように、コンストラクターとして文字列を渡すことができます。あるいは、Java がメソッドのオーバーロードをサポートしているため、必要に応じて両方を行うこともできます。

推奨事項

メソッドのオーバーライドについてはhttp://docs.oracle.com/javase/tutorial/java/javaOO/methods.htmlを参照して、文字列とオブジェクト参照の両方を値で渡す方法を確認してください。今行っているのは、のオブジェクト参照をone値渡しすることです。必要ない場合や、インターフェースを使用して制限を設けたい場合があります。http://docs.oracle.com/javase/tutorial/java/concepts/interface.htmlを参照してください。

于 2013-04-19T14:14:26.243 に答える
2

コンストラクターを使用して値を渡す

public class Two {

private String value;

public Two(String a){

  this.value=a;

    System.out.println("Ok "+value+", lets start!");

  }

 //getter and setters
}

次に、インスタンスの作成中にそのコンストラクターを使用します

 Two object = new Two(name);
于 2013-04-19T14:14:59.527 に答える
0

コードをコンパイルするには、String name変数を静的フィールドに移動します。

public class One {

    public static String name;

    public static void main(String[] args){
        // Note: The "name" variable is no longer defined here
        String start; // etc
        // rest of code the same
    }
}

これが優れたコード設計であるとは言いませんが、要求どおりに動作します。

于 2013-04-19T14:15:26.783 に答える
0

あなたもこのようにします

public class One {
    private String name;

    public void setName(String name){
      this.name = name;
    }

    public String getName(){
     retrun this.name;
    }

    public static void main(String[] args){

        String name;
        String start;
        Scanner input = new Scanner(System.in);

        System.out.println("Hello, what is your name?");
        name = input.nextLine();

        System.out.println("Hello "+name+", welcome! To ocntinue, please hit any key.");
        start = input.nextLine();

        if(start != null){
            Two two = new Two();
            two.printName(this); 
        }

    }

    class Two{

           public void printName(One one){
            System.out.println("" + one.getName() );
           }

    }
于 2013-04-19T14:24:19.107 に答える
0

値を Two クラスに渡しますconstructor

if(start != null){
        Two object = new Two(start );
    }

public Two(String  s){

    System.out.println("Ok "+s+", lets start!");

}
于 2013-04-19T14:12:10.057 に答える