# Probleme mit get und set Array



## deiwid (2. Mai 2010)

Hallo also ich muss eine Klasse schreiben mit einem Array von int-Werten und den kleinsten und 2.kleinsten Wert ausgibt.

Ich habe aber jedoch bedenken ob meine set und get Methoden stimmen weil ich darauf vom Testprogramm nicht zugreifen kann. Oder müssen get und set Methoden sich auf einzelne Zahlen beziehen und nicht auf ein ganzes Array. Hab gegoogelt, jedoch nichts brauchbares gefunden.

Ich bitte euch um ein wenig Hilfe!


```
public class Array {
	
	private int[] a;

	
	public Array(int n) {
		a = new int[n];
			
	}
	
	public int[] getArray(){
		return a;
	}
	
	public void setArray(int[] a) {
		this.a=a;
	}
	
	public int kleinsterWert(){
		
		int erg = a[0];
		for(int i = 0; i > a.length; i++){
			
			if(a[i] < erg)
				erg = a[i];
				}
	
		return erg;
		
	}
	
	public int zweitKleinsterWert(){
		
		int erg = a[0];
		int min2 = a[0];
		for(int i = 0; i > a.length; i++){
			
			if(a[i] < erg) {
				min2 = erg;
				erg = a[i]; }
			if(a[i] < min2){
					
					min2 = a[i]; }
			
			}
		return min2;
	}

}
```


```
public class Tester {
	
	public static void main( String [] args) {
		
		Array b = new Array(20);
		b.setArray(12, 45, 56 34); // das geht anscheinend nicht
	}

}
```


----------



## eRaaaa (2. Mai 2010)

```
b.setArray(12, 45, 56 34); // das geht anscheinend nicht
```

Nunja, so übergibst du ja auch kein Array, sondern eben einfach nur 4 einzelne Integer 
Du könntest varargs benutzen, dann ginge dein Aufruf! D.h. deine set Methode müßte so aussehen

```
public void setArray(int... a) {  //varargs
        this.a=a;
    }
```

Oder du belässt eben die Methode so wie sie ist, dann musst du aber auch ein Array übergeben:

```
b.setArray(new int[]{12, 45, 56, 34});
```

Ich persönlich finde varargs ziemlich praktisch :toll: , aber wie du das letztendlich machst, ist eig. fast egal ^^

edit: p.s.: deine Bedingungen in den Schleifen bei kleinster- und zweit kleinster Wert sind falsch *g*


----------



## deiwid (3. Mai 2010)

super, danke für die schnelle Hilfe. Hab jetzt auch den kleinsten ausgebessert.

beim zweitkeinste hänge ich voll mit der formel....

ich kann sie sortieren lassen und dann einfach a[1] ausgeben. sollen versuchen es ohne sortierverfahren zu lösen, weil es dann vielleicht effizienter ist. und ohne sortieren hab ich keinen plan.


----------



## BumBel (3. Mai 2010)

hey,

dein Sortierverfahren für den zweitkleinsten sieht auch sehr gut aus.
Du musst nur aus dem 2. if ein else if machen, sonst fragst du beim 1. if ob er kleiner is als die kleinste zahl, und beim 2. if ob er kleiner is als die 2. kleinste, was er ja logischerweisse auch ist, also hast du in beiden erg und min2 den kleinsten wert stehen

Und was ich auch noch anzumerken hab, du weisst erg a[0] und min2 a[0] zu.
Falls a[0] schon der kleinste wert ist wirst du damit auch noch Probleme bekommen. Aber das rauszufinden überlass ich mal dir, wenn nich kannst ja gerne nochmal fragen.

viele grüße


----------



## deiwid (3. Mai 2010)

hmmm leider komm ich nicht drauf was der anfangswert sein soll. egal was für einen anfangswert ich nehme beim testprogramm kommt immer der anfangswert raus. 

das mit dem else if hast du so gemeint:


```
int erg = ;
        int min2 = ;
        for(int i = 0; i > a.length; i++){
            
            if(a[i] < erg) {
                min2 = erg;
                erg = a[i]; }
            
            else if(a[i] < min2){
                    
                    min2 = a[i]; }
            
            }
        return min2;
    }
```


----------



## BumBel (4. Mai 2010)

oh was mir grad noch aufgefallen ist, deine schleifenbedingung ist falsch formuliert. Es müsste heissen solange i kleiner als a.length. 
	
	
	
	





```
for(int i = 0; i < a.length; i++)
```
Deswegen hast du immer den startwert zurückbekommen weil er die schleife nicht durchlaufen hat.

dann versuch ichs mal zu erklären:
wenn a[0] der kleinste wert ist, wird kein anderer wert ihn aus der variable min2 verdrängen können
du müsstest also ungefähr so vorgehen(vllt gibts auch geschicktere lösungen):

```
int erg;
		int min2;
		if(a[0] < a[1]){
			erg = a[1];
			min2 = a[0];
		}else{
			erg = a[0];
			min2 = a[1];
		}
```


----------

