# den zweit niedrigsten wert in einem array berechnen



## scripper (20. Sep 2006)

Servus  ich würde gern den zweit niedrigsten wert in einem array berechnen. Ich hab das mal so gemacht

```
public static int[]  minimal(int [ ] werte) {
  		int minimal[] = new int[2];
  		minimal[0] = werte[0];
		for (int i=0;i<werte.length;i++)
		{
			if ( werte[i] < minimal[0] ){
				minimal[0] = werte[i];
				minimal[1]=i;
			}
		}
		return minimal;
  	}
	public static int[]  second(int [ ] werte , int [ ] billigste) {
		int[] second = new int[2];
		second[0] = 99999999;
		for (int i=0;i<werte.length;i++)
		{
			if ( werte[i] > billigste[0]){
				if (werte[i] < second[0]){
					second[0]  = werte[i];
					second[1]=i;
				} 
				}if ( werte[i] == billigste[0]) {
					second[0] = werte[0];
					second[1]=i;
				}		
			}
		return second;
	}
```
aber dumm von mir ist das natürlich auch der billigste wert wieder verglichen wird und dieser natürlich gleich ist und immer als zweiter wert ausgegeben wird... wie kann ich das verhindern??


----------



## SlaterB (20. Sep 2006)

if ((i != billigste[1])  && ..){ 

damit ignorierst du das Element auf dem billigsten Index

----------


```
if (werte[i] < second[0]){ 
               second[0]  = werte[i]; 
               second[1]=i; 
            } 
            }if ( werte[i] == billigste[0]) { 
               second[0] = werte[0]; 
               second[1]=i; 
            }
```
soll eigentlich

```
if (werte[i] < second[0]){ 
               second[0]  = werte[i]; 
               second[1]=i; 
            } 
            }if ( werte[i] == billigste[0]) { 
               second[0] = werte[i]; 
               second[1]=i; 
            }
```
heißen?

läßt sich dann zusammenfassen zu:

```
if (werte[i] <= second[0]){ 
               second[0]  = werte[i]; 
               second[1]=i; 
            }
```


----------



## Tissi (22. Sep 2006)

Ich versteh nicht, was die vielen Arrays sollen. Was ist billigste?

um den zweitniedrigsten Wert eines Arrays zu berechnen, kannst du doch einfach folgendes machen:


```
public static int second(int[] werte)
{
    int lowest, second;
    for(int i = 0; i < werte.length; i++)
    {
        if (werte[i] < werte[lowest])
        {
            second = lowest;
            lowest = i
        }
        else
            if (werte[i] < werte[second])
                    second = i;
    }
    return second;
}
```

Da das werte Array nicht manipuliert wurde reicht es vollkommen, den ArrayIndex zu zurückzugeben, der zweitkleinste wert steht dann ja noch an dieser Stelle, und du kannst ihn einfach aus dem Array auslesen.

Falls du noch andere Positionen des Arrays brauchst, kannst du einfach das komplette Array sortieren und den zweiten Wert nehmen. aber wenn man nur das zweitkleinste bracht, ist der Aufwand natürlich viel zu groß.


----------

