double Array durchsuchen

alexschmid97

Aktives Mitglied
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

Top Contributor
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

Aktives Mitglied
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

Top Contributor
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

Aktives Mitglied
ah ok,:)
Java:
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

Aktives Mitglied
Java:
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

Top Contributor
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.
 

Joose

Top Contributor
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?
 

Flown

Administrator
Mitarbeiter
Eine Methode ist genau das richtige was du jetzt brauchst (Achtung etwas Pseudomäßiger gestaltet, da musst du eben noch mal selber ran):
Code:
public int linearSearch(float[] arr, float search) {
  for(i = 0 ... arr.length - 1) {
    if(arr[i] == search) return i;
  }
  return -1;
}
 

alexschmid97

Aktives Mitglied
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

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

Java:
     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");
       }
     }

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

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

Administrator
Mitarbeiter
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:
Java:
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:
Java:
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 ==):
Java:
if(list[i] == search) {...}

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

Neue Themen


Oben