2013-04-19 4 views
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!"); 
    } 
} 

ответ

0

передать ваше значение двум классам constructor.

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

и

public Two(String s){ 

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

} 
+0

Это работало, когда я изменил «старт» на «имя» в скобках для объекта класса, спасибо! –

+0

@ DanielSpeed ​​приветствую :).Пожалуйста, отметьте это как ответ, если это будет полезно. –

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. Передача экземпляра One конструктору Two
  3. Два затем вызывает getName()

Вы могли бы, как и другие предложили, передать строку в качестве конструктора; в качестве альтернативы, вы можете сделать оба, если требуется, поскольку Java поддерживает методы перегружать см

Рекомендации

Взгляните на http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html для переопределения методов, чтобы вы могли увидеть, как передать и строку и ссылку на объект по значению. То, что вы делаете прямо сейчас, это передать ссылку на объект one по значению. Это может быть не нужно, или вы можете предоставить ограничение с помощью интерфейса см http://docs.oracle.com/javase/tutorial/java/concepts/interface.html

+1

В конструкторе класса 'Two' вы вызываете метод getName как статический, а не из объекта' one'. –

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

Я не собираюсь говорить вам, что это хороший дизайн кода, но он делает то, что вы просили.

+0

Я сам это пробовал, но потом он выдает ошибку и говорит, чтобы удалить недействительные модификаторы, которые затем удалили общедоступные и статические и оставили меня обратно на квадрат 1 xD –

+0

ПРИМЕЧАНИЕ: Поле 'String name' определено ПЕРЕД основным методом - как поле класса! См. Edit, чтобы ответить, что, надеюсь, делает это более ясным – Bohemian

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

    } 
Смежные вопросы