2014-01-19 16 views
1

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

public class aff_array { 
     String name; 
    public static void main (String[] args) { 

     int z = 3; //total no of affirmations 
     int x = 1; 
     aff_array[] afz = new aff_array[z]; //dim 

     while (x < z) { 
      afz[x] = new aff_array(); // create objects for array 
      x = x + 1; 
     } 

     afz[1].name = "i am the best"; 
     afz[2].name = "you are the rest"; 

    } 

, но я действительно возникли проблемы, пытаясь понять, как я получить доступ к AFZ [1] .name, например, из другого класса. Это, вероятно, базовый, но я действительно борется.

+5

Это не относится к массивам. Ваша переменная 'afz' - это * локальная переменная *, она объявлена ​​в' main', и если вы не передадите значение другому методу (или скопируете его в поле где-то), ничто не сможет его увидеть. Я предлагаю вам прочитать http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html –

+1

Технически объявите его 'public String name' ... но вы, вероятно, должны скорее изучить Java, а не решить эту проблему конкретная проблема ... –

+0

Попробуйте опубликовать код для другого класса (хотя это не работает правильно). Покажите нам больше частей, которые у вас есть, и мы сможем их правильно собрать. – MikeHelland

ответ

2

Вы не можете получить к нему доступ из другого класса, если он создается как автоматическая переменная (другими словами, локальная переменная). В приведенном выше коде ваша конструкция «afz» будет видна только внутри основного метода (и может использоваться только после ее создания). Чтобы сделать его видимым для других классов, вы можете определить его как переменную экземпляра. То есть:

общественного класса aff_array {

String name; 
    aff_array[] afz; 

public static void main (String[] args) { 

    int z = 3; //total no of affirmations 
    int x = 1; 
    afz = new aff_array[z]; //dim 

Во-первых, вы должны определить его как частный, и создать геттер (это обычная практика, уважать герметизацию), а затем получить его на другой класс, просто вызывающий этот метод.

+2

Спасибо всем, Endrik - кажется, это ответ, который я ищу, я понимаю, что в настоящее время это локальная переменная, но у меня есть другой класс, где я пытаюсь сделать уведомление, и я хочу, чтобы это был msg для подачи этого уведомления , – sunirmalya

2

Вы можете получить доступ к «имя» общественного экземпляра переменной aff_array класса

//this will print value of instance variable name 
System.out.println(afz[1].name); 

//If you want to modify the value of variable 
afz[1].name = "modified name"; 

Однако это не рекомендуется. Защитите свою переменную экземпляра с помощью частного модификатора доступа и получите доступ к ней с использованием методов общего доступа, методов настройки.

Пример: общественный класс aff_array { private String name; public String getName() { return this.name; }

public void setName(String new_name) 
    { 
     //You can add some validations here 
     this.name = new_name; 
    } 

    public static void main (String[] args) { 

    int z = 3; //total no of affirmations 
    int x = 1; 
    aff_array[] afz = new aff_array[z]; //dim 

    while (x < z) { 
     afz[x] = new aff_array(); // create objects for array 
     x = x + 1; 
    } 

    //To print name 
    System.out.println(afz[1].getName()); 

    //to set new value to name 
    afz[1].setName("i am the best"); 
    afz[2].setName("you are the rest"); 

} 
+0

Это другой класс и где я хочу, чтобы значение массива заменить общественного класса OneShotAlarm расширяет BroadcastReceiver { \t @Override \t общественного недействительными OnReceive (контекст Контекст, Намерение Намерение) \t { setNotification (контекст, «Я хотите заменить это значением из массива "); WakeLocker.acquire (контекст); \t Toast.makeText (контекст: «Получен один сигнал тревоги». Больше тостов не будет показано. », Toast.LENGTH_SHORT) .show(); \t WakeLocker.release(); \t} – sunirmalya

+0

извините, потому что я так новичок, они не позволят мне ответить, и поэтому это не отформатировано, чтобы вы могли его прочитать. – sunirmalya

1

Так я пытался добавить добытчиками, и это выглядит как этот aff_array общественного класса { имя String; aff_array [] afz;

public aff_array[] getAfz() { 
    return afz; 
} 

public String getName() { 
    return name; 
} 

public static void main (String[] args) { 

     int z = 3; //total no of affirmations 
     int x = 1; 
     aff_array[] afz = new aff_array[z]; //dim 

     while (x < z) { 
      afz[x] = new aff_array(); // create objects for array 
      x = x + 1; 
     } 

     afz[1].name = "i am the best"; 
     afz[2].name = "you are the rest"; 

    } 

Это другой класс и где я хочу, значение массива, чтобы заменить aff_array.class.getName() с aff_array [] getAfz(), но я не знаю, как это сделать или ссылочный AFZ (1) для пример (getName работает)

public void onReceive(Context context, Intent intent) 
    { 

     setNotification(context, aff_array.class.getName()); 
     WakeLocker.acquire(context); 
     Toast.makeText(context,"One shot alarm received. No more toasts will be shown.", Toast.LENGTH_SHORT).show(); 
     WakeLocker.release(); 
    } 
Смежные вопросы