2016-03-31 13 views
1

Ich möchte eine Funktion erstellen, um einen Wert in einem Array zu ändern, aber ich möchte das Array nicht an die Funktion übergeben. Hier ist der Teil des Codes, data[] array erstellt an einer anderen Funktion.Ändern eines Array-Werts in der Java-Methode ohne Übergabe an die Methode

private int[] data; 

public static void main(String[] args) { 
    setPixel(3,2); //I'm not sure at this part? 
} 

public void setPixel(int i,int x){ 
    data[i] = x; //Is there any possible way to change data[] 
} 

Antwort

2

Sie sollten eine Klasse um Ihre main Methode erstellen und innerhalb main instanziiert. Sie machen dann data eine Variable Ihrer Klasse und Sie können darauf innerhalb der setPixel() Methode zugreifen. Dies ist der richtige objektorientierte Weg, um das zu erreichen, was du verlangst.

public class Data { 
    private int[] data; 

    public Data(int size) { 
     data = new int[size]; 
    } 

    public void setPixel(int i, int x) { 
     data[i] = x; 
    } 

    public static void main(String[] args) { 
     Data instance = new Data(5); 
     instance.setPixel(3, 2); 
    } 
} 
0

Hier ist meine Antwort, die wie so ziemlich was @zposten zur Verfügung gestellt, aber Adresse ist auch der data[] array created at another function Anforderung des OP:

public class EncapsulatedArray 
{ 
    private final int[] data; 

    public EncapsulatedArray(final int[] data) 
    { 
     this.data = data; 
    } 

    public int getPixel(final int i) 
    { 
     return data[i]; 
    } 

    public void setPixel(final int i, final int x) 
    { 
     data[i] = x; 
    } 

    @Override 
    public String toString() 
    { 
     return Arrays.toString(data); 
    } 
} 

Um zu überprüfen und zu demonstrieren, habe ich:

public class EncapsulatedArrayDemo 
{ 
    public static void main(final String[] args) 
    { 
     final int[] dataFromElsewhere = { 0, 1, 2, 3 }; 

     final EncapsulatedArray ex = new EncapsulatedArray(dataFromElsewhere); 

     System.out.println(ex); 

     ex.setPixel(2, 7 + ex.getPixel(2)); 

     System.out.println(ex); 
    } 
} 

und erhielt die folgenden zu Konsole:

{ 0, 1, 2, 3 } 
{ 0, 1, 9, 3 } 

Es gibt verschiedene Gründe, warum Wrapperklassen wie dieses (Spielzeug-) Beispiel nützlich sind, aber wenn Sie das Datenarray vor Änderungen von außen "schützen" wollen (z. B. nur setPixel(int, int) darf Werte in data ändern) dann benötigen Sie etwas mehr wie @ zposten Antwort, die nie das Array-Objekt data aus dem Wrapper entkommen lassen. Wenn Sie ein Datenarray created at another function verwenden müssen, dann ist etwas wie meine Lösung erforderlich - aber Sie müssen andere Schritte ausführen, um sicherzustellen, dass das Array nicht hinter der Rückseite des Wrappers manipuliert wird.

Verwandte Themen