Hallo.
Ich würde gerne die Array-Länge aus einer anderen Klasse wiedergeben.
Das Array wird in der Folgenden Klasse angelegt und befüllt :
Nun möchte ich in der folgenden Klasse LineareSuche die Länge des Arrays in der Methode suche() festlegen und in die Variable "rechts" speicher:
Die Main sieht wie folgt aus :
Könnte mir jemand hierbei behilflich sein ? Wenn ich in der Main b1.ausgabe() aufrufe, wird der ganze Array den ich bei liste angelegt habe ausgegeben. Allerdings kann ich nicht die länge des Arrays in b1 aufrufen?
Vielen Dank schon mal.
Ich würde gerne die Array-Länge aus einer anderen Klasse wiedergeben.
Das Array wird in der Folgenden Klasse angelegt und befüllt :
Java:
package a31;
import java.util.Arrays;
import java.util.Random;
public class Liste {
public int[] liste;
Random zufall = new Random();
public int rechts;
public void erzeugeZufallszahl(int plätze,int oberGrenze) {
//Erzeugt nicht gleichverteilte Zufallszahlen (doppelte sind möglich)
liste = new int [plätze];
//Anzahl an Plätze wird übergeben
for (int i=0; i<liste.length;i++) {
liste[i] = zufall.nextInt(oberGrenze);
// Liefert eine int-Pseudo-Zufallszahl im Bereich von 0 bis oberGrenze
}
}
public void sortieren(){
Arrays.sort(liste);
}
}
Nun möchte ich in der folgenden Klasse LineareSuche die Länge des Arrays in der Methode suche() festlegen und in die Variable "rechts" speicher:
Java:
package a31;
//BINÄRE SUCHE !!!
import java.util.Random;
import java.util.Arrays;
public class BinaereSuche extends Liste
{
int[] liste; //Array wird definiert als "liste"
Random zufall = new Random(); // wird erzeugt für Klasse erzeugenUnsortiert()
int suchzahl; //Dies ist die gesuchte Zahl
int plätze;
int links=0; // linker Index
int rechts; // rechter Index
long schritte;
long schritteSum; //Summe aller Schritte
public BinaereSuche(int[] array) {
liste = array;
}
public void ausgabe() {
for (int i=0; i<liste.length; i++) {
System.out.println("Zahl: "+ liste[i] + " || Index: " + i);
}
}
public int suche(int suchzahl) {
int mitte;
rechts = liste.length;//---> Hier soll die Länge des Arrays gespeichert werden.
links = 0;
while(suchzahl >= liste[links] && suchzahl <= liste[rechts]) {
mitte = (links + rechts) /2;
schritte++;
if( suchzahl>liste[mitte])
links = mitte +1;
else if ( suchzahl < liste[mitte])
rechts = mitte -1;
else
return mitte;
}
return -1;
}
public long suchzeitBinaer(int schritte1,int schritte2, int suchzahl) { //schritte1 = 30 , schritte2= 1000
schritte=0;
long zeit1=0; //Zeit für 30 Suchen
for (int x=0; x<schritte1;x++) {
long zeit2=0;; // Zeit für 1000 Suchen
this.suchzahl = suchzahl;
for (int j=0; j<schritte2;j++ ) {
final long timeStart = System.nanoTime();
suche(suchzahl);
final long timeEnd = System.nanoTime();
long zeit = timeEnd - timeStart;
zeit2 += zeit; //Zeit innere Schleife addiert
}
zeit1 += zeit2/schritte2; //Zeit äußere Schleife addiert
System.out.println("Suchzahl"+x+": " +suchzahl+" Zeit: "+zeit2/schritte2+" Schritte: "+schritte);
//Für Anzahl an schritte2 wird die Zeit wiedergegeben sowie die Schritte
schritteSum += schritte;
schritte=0;
}
long zeitFinal=zeit1/schritte1; //Finale-Zeit
System.out.println("Suchzeit: "+zeitFinal+" Nanosek." + " Schritte Durchschnitt: "+schritteSum/schritte1);
schritteSum= 0;
return zeitFinal;
}
}
Die Main sieht wie folgt aus :
Java:
public class Main {
public static void main(String[] args) {
Liste list = new Liste();
list.erzeugeZufallszahl(100, 200);
list.sortieren();
BinaereSuche b1 = new BinaereSuche(list.liste);
System.out.println(b1.rechts);
b1.suchzeitBinaer(30, 10000, 0);
}
}
Könnte mir jemand hierbei behilflich sein ? Wenn ich in der Main b1.ausgabe() aufrufe, wird der ganze Array den ich bei liste angelegt habe ausgegeben. Allerdings kann ich nicht die länge des Arrays in b1 aufrufen?
Vielen Dank schon mal.