# length, print, set, get, resize



## David2456 (5. Jan 2016)

Hallo
Kann mir einer einen Ansatz geben wie ich diese Methoden implementieren kann? Also es geht mir prinzipiell darum das die Methoden bei dem Aufruf array.print/set/get/resize funktionieren nicht selbst um die Methoden.

Danke schonmal


----------



## strußi (5. Jan 2016)

hast du die Methoden schon implementiert?
wie im Text beschrieben, musst du die Methoden in der Klasse mit der Mainmethode implementieren.

zeig mal, was du an code schon fertig hast, egal ob noch etwas fehlt.


----------



## David2456 (5. Jan 2016)

Die Methoden sind noch nicht geschrieben. Wollte erstmal wissen wie das mit dem z.B array.print(); funktioniert. Also das funktioniert so wie es da steht wenn ich die Mehtoden in der Main Class schreibe und nicht seperat in einer anderen, wie gewöhnlich bei Methoden. Hab ich das richtig verstanden?


----------



## Bitfehler (5. Jan 2016)

Das geforderte print ähnelt dem in dem von dir erstellten Thema http://www.java-forum.org/thema/get-und-set.171213/  sehr.
Da deine Aufgaben vom Wissen her aufeinander aufbauen, wäre es vlt sinnvoll, erstmal eine Aufgabe fertig zu stellen.


----------



## David2456 (11. Jan 2016)

Die voherige Aufgabe habe ich nun gelöst. Nun zum Verständnis. Jetzt soll ich aber die Methoden in ResizableArray  schreiben und nicht eine extra Klasse erstellen oder?


----------



## David2456 (11. Jan 2016)

Ok jetzt habe ich die Aufgabe verstanden. Es wird ja eine neue Klasse namens array erzeugt. Jetzt ist meine Frage wie ich die Klasse schreibe damit sie wie ein Array ausgegeben wird

edit Doch nicht. Ich habe keine Ahnung wie ich anfangen soll


----------



## David2456 (11. Jan 2016)

edit Ansatz?

```
public class ResizableArray {
        int[] data = new int[10]; // Backing array to store values.
       
        public static void main(String[] args) {
            ResizableArray array = new ResizableArray();
            array.print();
            for (int i = 0; i < array.length(); i++) {
                array.set(i, i);
            }
            array.print();
           // Out.println("Setting value 10 at index 10");
            //array.set(10, 10);
            //Out.println("Resizing array");
           // array.resize();
           // Out.println("Setting value 10 at index 10");
           // array.set(10, 10);
           // array.print();
           // Out.println("Value at index 10 is " + array.get(10));
        }
      
        public int length(){
            return data.length;
        }
      
     public int[] print() {
            return data;
        }
      
        public void set(int i){
  
         data[i] = i;
          
        }
}
```


----------



## strußi (12. Jan 2016)

print() soll das gesamte Array ausgeben, also for(object o : objects)(for-each-schleife) objects ist die referenz auf das array und object o musst du an deinen Datentyp anpassen.
set( int index, int value) testen ob index innerhalb der Arrayindices ist, wenn nicht Fehlermeldung wenn ja wert setzen
resize() neues Array mit doppelter Größe des alten Arrays erstellen und die Werte aus dem alten Array in den neuen kopieren und die Referenz anpassen.


----------



## David2456 (12. Jan 2016)

Danke erstmal. Zum set wie kann ich denn den Array Elementen den jeweiligen Wert zuweisen? So wie oben klappt es ja nicht


----------



## Joose (12. Jan 2016)

Deine set Methode erwartet nur einen Parameter, du übergibst aber 2 -> beide mal "i".
Deine setMethode sollte 2 Parameter erwarten: 1.Parameter ist der Index, dessen Wert du setzen willst, 2.Parameter ist der Wert den du setzen willst.


----------



## David2456 (12. Jan 2016)

Ok funktioniert nun. In der Aufgabe steht aber auch das wenn der Fehler out of bounds auftritt, nur der Text ausgegeben werden soll und nicht die Fehlermeldung von java. Wie funktioniert das denn? break?


----------



## Bitfehler (12. Jan 2016)

Wie sieht dein Code denn mittlerweile aus?


----------



## David2456 (12. Jan 2016)

```
public class ResizableArray {
       



        int[] data = new int[10]; // Backing array to store values.
       
       
        public static void main(String[] args) {
           
           
            ResizableArray array = new ResizableArray();
            array.print();
            for (int i = 0; i < array.length(); i++) {
                int i2 = i;
                array.set(i, i2);
            }
               
            array.print();
            Out.println("Setting value 10 at index 10");
            array.set(10, 10);
            //Out.println("Resizing array");
           // array.resize();
          //  Out.println("Setting value 10 at index 10");
         //   array.set(10, 10);
          //  array.print();
          //  Out.println("Value at index 10 is " + array.get(10));
        }
       
        public int length(){
            return data.length;
        }
       
         public void print(){
                Out.print("[");
                int kommas = 0;
                for (int i=0;i <data.length;i++){
                    kommas = kommas +1;
                    Out.print(data[i]);
                    if (kommas < data.length){
                        Out.print(",");
                    }
                }
                Out.print("]\n");
            }
       
        public void set(int i, int i2){
       
            if (i > data.length){
                Out.println("Index is out of bounds. Value was not set.\n");              
            }
            else data[i] = i2;
                          
        }
```


----------



## David2456 (12. Jan 2016)

edit  Bei der get Methode. Wie gebe ich denn das gewünschte 10. Element zurück?


----------



## Bitfehler (12. Jan 2016)

Wir reden über die Set-Methode, oder?
Da gibt es zwei Varianten:

Prüfe deine Parameter
Ich würde deine if-Bedingung ein wenig abändern wollen. Es ist oftmals sinnvoller zu prüfen, ob die Parameter den Bedingungen entsprechen. In deinem Fall wäre es die Prüfung, ob i zwischen 0 und data.lenght-1 liegt. Sollte das der Fall sein, mache etwas. (Statt data.length kannst du auch deine length-Methode verwenden) 
Wenn nicht, dann (im else-Zweig) eine einfache Ausgabe wie du sie hast.
Catch Exception

Edit:
Indem du einen get schreibst:

```
pubilc int get(int index){
return array[index];
}
```
(Beachte das zehnte Element, steht im index neun. Ein array-index beginnt bei 0. Ob, du das beachtest, bleibt dir überlassen) Zudem müsstest du hier wieder Zugriffe außerhalb eines gültigen Index behandeln.


----------



## David2456 (12. Jan 2016)

Dankeschön. Das mit dem get dachte ich mir auch, habe s aber nicht so ausprobiert. War wegen der 10 verwundert, aber es funktioniert ja so


----------

