Problem mit Methoden als Parameter

KanzlerOne

Grünschnabel
Hi,
ich habe folgenden Code und ein kleines Problem:

Code:
public class SearchEngines<T> {

    
    T val;
    
     boolean isEqual(T e){     
     if(val.equals(e)) return true;
    else return false;
        }           
 
    
    int linear(T[] a, boolean p) throws Exception{
    for(int i = 0; i < a.length; i++){
        val = a[i];
        if(p) return i;
    }    
        throw new Exception("element not found");
    }  
          
    }

Da - anders als bei Sprachen wie z.B. Scala - es in Java nicht möglich ist, eine Funktion als Parameter zu übergeben, muss also der Ergebniswert der Funktion übergeben werden. Und da ist das Problem: Übergebe ich die Methode, wird sie sofort ausgeführt, ich möchte aber, dass sie erst in der Zeile "if(p) return i;" ausgeführt wird.
Oder ist es einfach notwendig, für jede bool'sche Funktion eine eigene Suchmethode zu schreiben, die diese selber implementiert? Es muss doch möglich sein, eine einzige generische Suchmethode zu schreiben, der man bei Bedarf eine andere Funktion übergeben kann, die dann auf die Arrayelemente angewendet wird.

Gruß
 
Hi und Willkommen bei tutorials.de :)

Es ist in Java auch möglich, Methoden als Params zu übergeben.

Such mal nach Delegate - da findet man mengenweise im Internet.

Gruß
 
Zuletzt bearbeitet:
Hi und Herzlich Willkommen bei Tutorials,
ich nehme mal an, dass du in der Methode "linear(T[] a, boolean p)" einen Vergleich machen willst, um zu überprüfen, ob a[i] gleich val ist?
Du musst einfach deine Denkweiße rumdrehen. ;)
Denn wenn du es so machst:
Java:
public class SearchEngines<T> {
    T val;
    
    boolean isEqual(T e){     
       if(val.equals(e)) return true;
       else return false;
    }
    
    int linear(T[] a) throws Exception{
        for(int i = 0; i < a.length; i++){
            if(isEqual(a[i])) {
                return i;
            }
        }    
        throw new Exception("element not found");
    }  
}
... sollte es funktionieren.

Allerdings würdest du jetzt einen NullPointerException bekommen, da die Variable val noch 'null' ist. Diese müsstest du vorher also erst initialisieren.

Ich hoffe ich habe dich richtig verstanden, so dass dir mein Kommentar auch weiter hilft.

ps: Benutze bitte das nächste mal die java-Tags ("CODE" durch "java" ersetzen)

Gruß

Fabio
 
Zuletzt bearbeitet:
Zurück