Java Array Länge aus anderer Klasse lesen


slitec

Grünschnabel
#1
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 :

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.
 

Neue Beiträge