# double Array durchsuchen



## alexschmid97 (29. Okt 2015)

Hey Leute, 
ich hab noch nie in meinem Leben programmiert und hab jetzt AuD an der Uni. Deshalb hab ich ne frage bezüglich Arrays.
Also ich hab eine Array mit Fließkommazahlen, bestimmter Länge.
Jetzt soll ich die Position einer dieser Zahlen ausgeben. 
ich hab keine Ahnung wie das gehen soll. 
ich hoffe ihr könnt mir helfen.

Alex


----------



## Joose (29. Okt 2015)

Hast du überhaupt schon einen Ansatz?

Eine Schleife welche von Index 0 bis Arraylänge-1 läuft. Bei jedem Durchlauf prüfst du ob die Zahl hinter dem aktuellen Index die gesuchte ist.
Wenn ja gibt diese als Rückgabewert zurück oder auf der Konsole aus.


----------



## alexschmid97 (29. Okt 2015)

also so..


----------



## alexschmid97 (29. Okt 2015)

aber die zahlen in einem Array werden doch willkürlich erstellt. Also wie will ich dann wissen dass die zahl die ich suche überhaupt in meinem Array ist?


----------



## Joose (29. Okt 2015)

Bitte poste den Code im Forum direkt und nicht als Screenshot, danke! 
Mittels [ CODE] hier dein Code [ /CODE] kannst du diesen schön formatiert posten (ohne den Leerzeichen bei nach den [-Klammern.

Zu deinen Code: Du wirst ein Problem haben wenn die Schleife durchläuft -> ArrayIndexOutOfBoundsException.
Du willst im letzten Durchlauf auf Index 10 zugreifen, dein Array hat aber nur maximal Index 9 (da in Java Arrays bei Index 0 anfangen).

Nein die Zahlen werden nicht willkürlich erstellt. Primitive Datentypen (wie double oder int sie sind) haben einen Defaultwert. Bei double ist dies 0.0 bei int ist dies 0.
In deinem Code setzt du auf auf den aktuellen Index den Wert deiner Variable "i"


----------



## alexschmid97 (29. Okt 2015)

ah ok,

```
public class test4 {
public static void main (String []args) {

double array[]=new double [10];

for (int i=0 ; i<array.length; i++) {
    array[i]=i;
}
```

und wie ist es jetzt nun mit der double -zahl die ich prüfen möchte?


----------



## alexschmid97 (29. Okt 2015)

```
public class test4 {
   public static void main (String []args) {
     double array[]=new double [10];
     double a=5.6667;
     
     for (int i=0 ; i<array.length; i++) {
       array[i]=i;
       if (array[i]==a){
         System.out.println(array[i]);
       } else {
         System.out.println("nicht");
       }
     }
   }
}
```

würde es so gehen?


----------



## Joose (29. Okt 2015)

Ja so würde es theoretisch gehen.

Dein Code aber ist etwas sinnlos. Du erzeugst ein neues Array, befüllst in einer Schleife das Array mit ganzzahligen Werten (0,1,2,3,4,5,6,7,8,9) und im gleichen Schritt fragst du auch ab ob der Wert deiner Variable a ist.


----------



## alexschmid97 (29. Okt 2015)

oh hahah ok und wenn ich jetzt wissen möchte an welcher Stelle eine double Zahl ist ?


----------



## Joose (30. Okt 2015)

Dein Code oben passt schon so .... das einzige was "falsch" ist => Du befüllst dein Array im gleichen Schritt und das nur mit ganzen Zahlen.

Dein Aufgabenstellung war: Du hast ein Array mit Fließkommazahlen, bestimmter Länge.
Sprich laut Aufgabe hast du schon ein mit Werten befülltes Array oder? Und von du sollst schauen ob in diesem Array ein bestimmter Wert vorkommt?


----------



## alexschmid97 (30. Okt 2015)

Ja genau, wie krieg ich dann das hin ?


----------



## alexschmid97 (31. Okt 2015)

Muss ich die die Schritte in der schleife ändern ?


----------



## Flown (1. Nov 2015)

Eine Methode ist genau das richtige was du jetzt brauchst (Achtung etwas Pseudomäßiger gestaltet, da musst du eben noch mal selber ran):

```
public int linearSearch(float[] arr, float search) {
  for(i = 0 ... arr.length - 1) {
    if(arr[i] == search) return i;
  }
  return -1;
}
```


----------



## alexschmid97 (2. Nov 2015)

könntest du mir erklären wie diese Methode grundsätzlich aufgebaut ist? Also was muss ich alles in diese Methode schreiben, dass ich das gewünschte Ergebnis bekommen. 
Es muss ja auch eine ganz normale Schleife enthalten sein oder?
und was bedeutet in deinem Quellcode das arr_==search ?_


----------



## Joose (2. Nov 2015)

Hier dein eigener Code von einem vorherigen Post. Das einzige was ich entfernt habe ist das belegen des Arrays mit Werten.


```
double a=5.6667;
    
     for (int i=0 ; i<array.length; i++) {
       if (array[i]==a){
         System.out.println(array[i]);
       } else {
         System.out.println("nicht");
       }
     }
```



Flown hat gesagt.:


> ```
> public int linearSearch(float[] arr, float search) {
> for(i = 0 ... arr.length - 1) {
> if(arr[i] == search) return i;
> ...





alexschmid97 hat gesagt.:


> könntest du mir erklären wie diese Methode grundsätzlich aufgebaut ist? Also was muss ich alles in diese Methode schreiben, dass ich das gewünschte Ergebnis bekommen.
> Es muss ja auch eine ganz normale Schleife enthalten sein oder?
> und was bedeutet in deinem Quellcode das arr_==search ?_



Jetzt schau dir deinen Code an und den Code von Flown.
Merkst du die Zusammenhänge? Flown gibt zwar nichts auf der Konsole aus, aber dafür einen Index zurück wenn die entsprechende Zahl gefunden wurde bzw. "-1" wenn sie nicht gefunden wurde.
Ich habe dir schon gesagt dein Code passt schon so wie er ist (außer das du gleichzeitig dein Array befüllst).
Flown hat dir nun gezeigt das es sinnvoll ist diesen Code in eine eigene Methode auszulagern, damit man diese einfach mit den gewünschten parametern aufrufen kann!


----------



## Flown (2. Nov 2015)

Wie Methoden grundsätzlich aufgebaut sind findest du z.B. HIER.

Naja was würdest du tun, wenn du eine Liste (auf Papier) mit Zahlen erhälst und du bekommst zusätzlich noch eine Zahl und musst sagen, ob in der Liste die Zahl vorkommt?
Du beginnst am Anfang der Liste und prüfst Zahl für Zahl in der Liste, ob die gesuchte Zahl in der Liste vorhanden ist. ==> Das ist also dein Algorithmus.

Was benötigst du dafür: Die List mit Zahlen und die gesuchte Zahl, dann sieht dein Methodenkopf so aus:

```
public static int linearSearch(float[] list /* Liste mit Zahlen*/, float search /* gesuchte Zahl*/) {...}
```

Durchlaufen einer Liste (besser gesagt ein Array - eine Liste ist ein Array mit dynamischer Länge) mit einer Zählschleife:

```
for(int i = 0; i < list.length; i++) {...}
```

Für jede Zahl (also jede Stelle im Array -> Zugriff mit `array[position]`) gehört dann noch geprüft, ob die Zahl die gesuchte ist (passiert mit dem Vergleichsoperator `==`):

```
if(list[i] == search) {...}
```

Jetzt hast du alle Teile die du brauchst, um das fertig zu stellen.


----------

