2015-04-10 2 views
1

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

public void initializeArray() 
{     
    String sentences[] = new String[5]; 

    for(int i=0; i<5; i++) 
    { 
     sentences[i] = i+1; 
    } 
} 

public void printArray() 
{ 
    for(int i=0; i<5; i++) 
    { 
     System.out.println(sentences[i]); 
    } 
} 

Я знаю, что я мог бы сделать это в одном для цикла, но может кто-нибудь объяснить, как Я могу напечатать массив таким образом? Мне нужно получить доступ к массиву предложений в отдельном методе, в котором он инициализирован. Я попытался создать экземпляр массива в верхней части программы, но он дает мне сообщение об ошибке «Локальная переменная скрывает поле».

+0

Из кода, который вы предоставили, массив предложений привязан к методу initializeArray(). Вы уверены, что не хотите передавать массив из инициализации или передать его в метод printArray()? – OldTroll

ответ

0

Изменение подписи вашего метода printArray быть

public void printArray(String[] sentences){...} 

Так у вас есть

public void initializeArray(){ 
    int arraySize = 5; 
    String[] sentences = new String[arraySize]; 
    for(int i=0; i<arraySize; i++){ 
     sentences[i] = new String(i+1); 
    } 
    printArray(sentences); 
} 
0

Сделать приговаривает глобальную переменную или параметры для обеих функций.

1

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

У вас уже есть переменная экземпляра, поэтому удалить локальную переменную внутри метода:

public void initializeArray() 
{     
    //String Sentences[] = new String[5]; 
    ... 
} 

Также не используйте магические числа, как вы делали в для цикла:

for(int i=0; i<5; i++)//use `sentences.length` instead of `5` 
0

Существует два способа доступа к одному массиву из двух методов:

  • Доступ: массив через переменную экземпляра типа массива, или
  • Передайте массив методам в качестве параметра.

Первый подход выглядит следующим образом:

class TestInstanceVar { 
    private String[] sentences = new String[5]; 
    public static void main(String[] args) { 
     TestInstanceVar obj = new TestInstanceVar(); 
     obj.initializeArray(); 
     obj.printArray(); 
    } 
    public void initializeArray() { 
     ... 
    } 
    public void printArray() { 
     ... 
    } 
} 

Здесь методы доступ sentences как переменный экземпляр, который является общим для всех методов, работающих на тот же экземпляр.

Второй подход выглядит следующим образом:

class TestPassArray { 
    public static void main(String[] args) { 
     private String[] sentences = new String[5]; 
     initializeArray(sentences); 
     printArray(sentences); 
    } 
    public static void initializeArray(String[] sentences) { 
     ... 
    } 
    public static void printArray(String[] sentences) { 
     ... 
    } 
} 

Здесь массив создается в методе main и передается в явном виде в качестве параметра методов инициализации и печати. Обратите внимание, что методы отмечены static и доступны без создания объекта.

0

Есть ваш initializeArray возвращают массив, как в

public String[] initializeArray() { 

    ... 
    return sentences; 
} 

Измените ваш printArray на

public void printArray (String [] arr) { 
    ... 
    System.out.println(arr[i]); 
} 

Imagine основной метод, как

String myArr [] = initializeArray (); 
printArray (myArr); 
+0

@DWright Tahnks для вашего редактирования. –

+0

Уверен, у меня есть опечатки, как это все время. – DWright

0

Следующая должно работать:

class MyClass 
{ 

    private String sentences[] = new String[5]; 

    public void initializeArray() 
    {     
     for(int i=0; i<5; i++) 
     { 
      sentences[i] = i+1; 
     } 
    } 

    public void printArray() 
    { 
     for(int i=0; i<5; i++) 
     { 
      System.out.println(sentences[i]); 
     } 
    } 
} 
0

Метод printArray ничего не знает о предложениях?

Java передается по значению и требует, чтобы вы буквально передавали значение части данных методу для того, чтобы метод хрустнул на нем. Глобальные значения - это в основном значения, которые известны каждому объекту.

Таким образом, вам нужно что-то, что сообщит и initializeArray, и printArray, что есть эта часть предложений данных, над которой надлежит работать.

// A Calling Function 
public void initializeAndPrintStringArray 
{ 
    // Get the initialized Sentences Array 
    String[] sentences = initializeArray(); 

    // Print this Initialized Array 
    printArray(sentences) 
} 

// For doing this, you need to change the definitions of your methods 

public String[] initializeArray() 
{     
    String[] sentences = new String[5]; // You have a spelling mistake here 

    for(int i=0; i<5; i++) 
    { 
     sentences[i] = i+1; 
    } 
    return sentences 
} 

public void printArray(String[] sentences) 
{ 
    // Don't assume the length will always be 5 or something you know beforehand. 
    for(int i=0; i<sentences.length; i++) 
    { 
     System.out.println(sentences[i]); 
    } 
} 
1

Вы объявляете переменную предложения [] внутри метода initializeArray(). Из-за этого он не существует вне этого метода. Как только метод заканчивается, он исчезает. Другие методы не могут использовать переменную.

Вы должны объявить переменную вне метода, например:

public class Example { 

    static String sentences[] = new String[5];; 

    public static void main(String[] args) { 
     initializeArray(); 
     printArray(); 
    } 

    public static void initializeArray() { 
     for (int i = 0; i < 5; i++) { 
      sentences[i] = "" + (i + 1); 
     } 
    } 

    public static void printArray() { 
     for (int i = 0; i < 5; i++) { 
      System.out.println(sentences[i]); 
     } 
    } 
} 

Таким образом, вы можете использовать его в любом месте в этом классе. Если вы хотите использовать его в другом месте, добавьте к нему общедоступное ключевое слово.

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