Bir diziye başka bir yöntemle erişme

Bir diziye, başlatıldığı ayrı bir yöntemle erişmeye çalışıyorum.

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

Bunu bir döngü için yapabildiğimi biliyorum, ancak birisi diziyi bu şekilde nasıl yazdırabileceğimi açıklayabilir mi? Cümleler dizisine başlatıldığı ayrı bir yöntemle erişmem gerekiyor. Programın başında dizinin bir örneğini yapmaya çalıştım, ancak bana "Yerel değişken bir alanı gizliyor" diyerek hata veriyor.

1
Sağladığınız koddan, cümleler dizisi initializeArray() yöntemine dahil edilmiştir. Diziyi ilklendirmeden geri almak ya da printArray() yöntemine iletmek istemediğinizden emin misiniz?
katma yazar OldTroll, kaynak

8 cevap

Dizinin bir örneğini programın başında yapmaya çalıştım ama   bana "Yerel değişken bir alanı gizler" diyerek bir hata veriyor.

Zaten bir örnek değişkeniniz var, bu nedenle yöntem içindeki yerel değişkeni kaldırın:

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

Ayrıca for-loop'ta yaptığınız gibi sihirli rakamları kullanmayın:

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

initializeArray() yönteminin içinde cümleler [] değişkenini ilan ediyorsunuz. Bu nedenle, bu yöntemin dışında yok. Yöntem biter bitmez, ortadan kalkar. Diğer yöntemler değişkeni kullanamaz.

Değişkeni yöntemin dışında, şöyle belirtmelisiniz:

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

Bu şekilde, bu sınıfın herhangi bir yerinde kullanabilirsiniz. Başka bir yerde de kullanmak istiyorsanız, önce anahtar kelimesini genel ekleyin.

1
katma

printArray yöntemi cümle hakkında hiçbir şey bilmiyor mu?

Java, değere göre iletilir ve yöntemin üzerinde çalışabilmesi için bir veri parçasının değerini bir yönteme tam olarak vermenizi gerektirir. Genel değerler temel olarak her nesne için bilinen değerlerdir.

Bu nedenle, hem initializeArray hem de printArray 'ı üzerinde çalışılması gereken bu veri cümleleri olduğunu söyleyecek bir şeye ihtiyacınız var.

// 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
0
katma

Aynı diziye iki yöntemden erişmenin iki yolu vardır:

  • Diziye, dizi türünün bir örnek değişkeni üzerinden erişin veya
  • Diziyi bir parametre olarak yöntemlere iletin.

İlk yaklaşım şöyle gözüküyor:

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() {
        ...
    }
}

Burada, yöntemler, aynı örnek üzerinde çalışan tüm yöntemler arasında paylaşılan, bir örnek değişkeni olarak cümleler öğesine erişir.

İkinci yaklaşım şuna benziyor:

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) {
        ...
    }
}

Burada dizi, main yönteminde oluşturulur ve açıkça başlatma ve yazdırma yöntemlerine bir parametre olarak iletilir. Yöntemlerin statik olarak işaretlendiğini ve bir nesne oluşturmadan erişildiğini unutmayın.

0
katma

initializeArray öğesinin olduğu gibi bir Dizi döndürmesini sağlayın

public String[] initializeArray() {

   ...
   return sentences;
}

printArray 'ınızı değiştirin

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

Gibi bir ana yöntem düşünün

String myArr [] = initializeArray  ();
printArray (myArr);
0
katma
@DWright Düzenlemeniz için Tahnks.
katma yazar Scary Wombat, kaynak
Tabii, her zaman böyle bir yazım hatası var.
katma yazar DWright, kaynak

printArray yönteminizin imzasını değiştirin.

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

Yani sahipsin

public void initializeArray(){
   int arraySize = 5;
   String[] sentences = new String[arraySize];
   for(int i=0; i
0
katma

Aşağıdakiler çalışmalıdır:

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
katma

Her iki fonksiyon için cümleleri global bir değişken veya parametreler yapın.

0
katma