/**
 * Beispiel Code zur Vorlesung PI1 - WS2002/2003
 * jp@informatik.uni-bremen.de
 * ulrichh@informatik.uni-bremen.de
 *
 */

 //
 // Wir entwickeln eine Methode sucheWert(7,a), die im Array a
 // den Wert 7 sucht. Falls 7 in diesem Array vorkommt, soll der I
 // zugehörige Index zurückgegeben werden.
 

// Eine sinnvolle Rückgabe der Methode sucheWert für den Fall, daß 
// der Wert 7 NICHT  vorkommt, soll nicht nur als Integerwert die
// Länge des Arrays zurückgeben, sondern auch noch eine Boolesche
// Variable, die angibt, ob die Suche erfolgreich war. Diese soll
// helfen, bei der weiteren Verwendung der Rückgabewertes nicht
// die Grenzen des Arrays zu überschreiten.



// Dazu wird die Klasse MyReturnType deklariert.

class MyReturnType {int i; boolean ok;}



public class VorlesungClass {

// Hier nun die Methodendeklaration fuer sucheWert. Die Methode hat den
// Rueckgabetyp MyReturnType und wird mit zwei Parametern verwendet.
// Bei der Deklaration werden dafuer die Formalparameter w vom Typ int
// und z vom Typ int[] verwendet.

    static MyReturnType sucheWert (int wert, int [] z){
	MyReturnType r = new MyReturnType();

        // Hier wird einn Objekt vom Klassentyp MyReturnType erzeugt,
        // r enthaelt den Verweis (die Referenz) auf dieses Objekt.
        // Zugriffe auf die Daten des Objektes erfolgen ueber diese
        // Referenzvariable in Punktnotation: r.i ist der i - Wert 
        // des von r referenzierten Objektes.

        r.i = 0;
        while (r.i < z.length && z[r.i] != wert) { r.i = r.i + 1;};
        r.ok = !(r.i == z.length);

        // Array z wird durchsucht, die Schleife bricht ab,
        // a) wenn das Ende des Arrays erreicht ist und wert nicht
        // gefunden wurde. In diesem Fall ist nach der
        // While-Schleife r.i == z.length, entsprechend wird r.ok auf
        // false gesetzt.
        // b) wenn wert im Array enthalten ist, dann wird r.ok auf true 
        // gesetzt, und r.i enthaelt gerade den Indexwert and dem wert
        // zu finden ist.     



        return r;
    }





    public static void main (String args[]){
        int sonstiges;
	int [] a = { 39, 5, 6, 22, -15, 37, 36, 2, 8, 37 };

        int [] b = new int[100];
        MyReturnType w = new MyReturnType();
        w = sucheWert(7,a);
        if (w.ok) {
	    System.out.println(" Eine 7 existiert an Stelle " + w.i);
           sonstiges = a[w.i];
	   // hier wird zunaechst die boolesche Variable abgefragt.
           // Wenn die 7 NICHT im Array vorgekommen waere, haette 
           // sucheWert als Index a.length geliefert, a[a.length]
           // ueberschreitet aber die Arraygrenzen! 

	}
	else {
	    System.out.println("Keine 7 im array");};
    }
}
