# Boolsches Flag



## fiber (21. Okt 2014)

hallo Zusammen, brächte Hilfe beim lösen der Aufgabe.
folgende Methode ist gegeben:


```
public void bestimmteDetailsAusgeben(String suchbegriff)
    {
        for ( String dateiname : dateien)
        {
            if( dateiname.contains(suchbegriff))
            {
                System.out.println(dateiname);
            }
        }
    }
```

dazu folgende Aufgabe:

Gibt es in dieser Methode eine Möglichkeit, nach beenden der *for-each*-Schleife eine Nachricht auszugeben,  die darüber informiert,dass kein Dateiname mit dem Suchbegriff übereinstimmt? hinweiss: verwenden sie eine boolesche Variable.

zum lösen der Aufgabe habe ich folgenden Ansatz:
die Schleife könnte man:


```
...}
else{ System.out.println("es gibt keine Dateiname die: "+dateiname +" heißt!")
```

_hier der komplette Quellcode:
_

```
import java.util.ArrayList;

/**
 * Eine Klasse zur Verwaltung von Audiodateien.
 * 
 * @author David J. Barnes und Michael Kölling.
 * @version 31.07.2011
 */
public class MusikSammlung
{
    // Eine ArrayList, in der die Namen von Audiodateien gespeichert werden können.
    private ArrayList<String> dateien;
    // Ein Player zum Abspielen der Musikdateien.
    private MusikPlayer player;

    /**
     * Erzeuge eine MusikSammlung
     */
    public MusikSammlung()
    {
        dateien = new ArrayList<String>();
        player = new MusikPlayer();
    }

    /**
     * Füge der Sammlung eine Datei hinzu.
     * @param dateiname die hinzuzufügende Datei.
     */
    public void dateiHinzufuegen(String dateiname)
    {
        dateien.add(dateiname);
    }

    /**
     * Liefere die Anzahl der Dateien in dieser Sammlung.
     * @return die Anzahl der Dateien in dieser Sammlung.
     */
    public int gibAnzahlDateien()
    {
        return dateien.size();
    }


    /**
     * Gib eine Datei aus der Sammlung auf die Konsole aus.
     * @param index der Index der Datei, deren Name ausgegeben werden soll.
     */
    public void dateiAusgeben(int index)
    {
        if(gueltigerIndex(index)) {
            String dateiname = dateien.get(index);
            System.out.println(dateiname);
        }
    }    
    
    /**
     * Gib eine Liste aller Dateien in der Sammlung aus.
     */
    public void alleDateienAusgeben()
    {
        for(String dateiname : dateien) {
            System.out.println(dateiname);
        }
    }
    
    public void bestimmteDetailsAusgeben(String suchbegriff)
    {
        for ( String dateiname : dateien)
        {
            if( dateiname.contains(suchbegriff))
            {
                System.out.println(dateiname);
            }
        }
    }
    
    /**
     * Entferne eine Datei aus der Sammlung.
     * @param index der Index der zu entfernenden Datei.
     */
    public void entferneDatei(int index)
    {
        if(gueltigerIndex(index)) {
            dateien.remove(index);
        }
    }

    /**
     * Starte das Abspielen einer Datei aus der Sammlung.
     * Zum Beenden des Abspielvorgangs verwende beendeAbspielen().
     * @param index der Index der abzuspielenden Datei.
     */
    public void starteAbspielen(int index)
    {
        if(gueltigerIndex(index)) {
            String dateiname = dateien.get(index);
            player.starteAbspielen(dateiname);
        }
    }

    /**
     * Stoppt den Player.
     */
    public void beendeAbspielen()
    {
        player.stop();
    }


    /**
     * Spiele eine Datei aus der Sammlung. Kehrer erst zurück, wenn das Abspielen beendet ist.
     * @param index der Index der abzuspielenden Datei.
     */
    public void abspielenUndWarten(int index)
    {
        if(gueltigerIndex(index)) {
            String dateiname = dateien.get(index);
            player.dateiAnspielen(dateiname);
        }
    }

    /**
     * Stelle fest, ob der gegebene Index für die Sammlung gültig ist.
     * Falls nicht, wird eine Fehlermeldung ausgegeben.
     * @param index der zu prüfende Index.
     * @return true, wenn der Index gültig ist, andernfalls false.
     */
    private boolean gueltigerIndex(int index)
    {
        // Der Rückgabewert.
        // Setze den Rückgabewert abhängig davon, ob der Index gültig ist oder nicht.
        boolean gueltig;
        
        if(index < 0) {
            System.out.println("Indizes koennen nicht negativ sein: " + index);
            gueltig = false;
        }
        else if(index >= dateien.size()) {
            System.out.println("Index ist zu gross: " + index);
            gueltig = false;
        }
        else {
            gueltig = true;
        }
        return gueltig;
    }
    
}
```


----------



## Flown (21. Okt 2014)

Also mal ein Stichwort wäre: Boolsche Variable + Flag

Ich mal dir jetzt einmal ein Gegenbeispiel an die Tafel:


```
import java.util.Arrays;
import java.util.List;

public class PredicateTest {
  public static void main(String[] args) {
    List<Integer> data = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
    int criteria = 6;
    printDataSmallerThan(data, criteria);
    List<Integer> noData = Arrays.asList();
    printDataSmallerThan(noData, criteria);
  }
  
  public static void printDataSmallerThan(List<Integer> data, int criteria) {
    boolean foundAny = false;
    for (int elem : data) {
      if (elem < criteria) {
        System.out.format("%d is smaller than %d.%n", elem, criteria);
        foundAny = true;
      }
    }
    if (!foundAny) {
      System.out.format("No element found in the list smaller than %d.%n", criteria);
    }
  }
}
```


----------



## fiber (21. Okt 2014)

Danke für die Antwort, aber ich bin leider Anfänger und arbeite erst nur mit Bluej. wenn man die Implementierung einfacher darstellen könnte, wäre ich Dankbar.

@"Also mal ein Stichwort wäre: Boolsche Variable + Flag"
ist Automatisch generiert worden, aber für´s nächste mal weiss ich Bescheid.


----------



## Flown (21. Okt 2014)

Also das KSKB ist eine einfache Implementierung IMO. Wie ich aus deinem Beispiel herauslesen kann, kennst du dich mit Collections (Listen), Methoden und Grundsätze der OOP aus. 

Also wo liegt denn das Problem jetzt?


----------



## fiber (1. Nov 2014)

Es tut mir Leid, weil ich erst jetzt antworte. hatte mein pw vergessen und hatte keinen zugriff auf meine Mails. 
Der Quellcode ist vorgegeben im Buch. Ich habe sie nicht selbst geschrieben. nur der Quellcode mit 2 Zeilen ist von mir geschrieben worden:

Java Code:
...}
else{ System.out.println("es gibt keine Dateiname die: "+dateiname +" heißt!")


----------



## Flown (1. Nov 2014)

Ich kann dir das nocheinmal in einem Prosaform darstellen, wenn du möchtest.

- Erstelle eine boolean Variable die mit false initialisiert wird.
- Laufe mit einer for-each-Schleife über dein Array/Liste.
- Überprüfe, ob die Eigenschaft zutrifft, wenn
-> ja: setze eine Variable auf true
-> nein: nichts geschieht

- Wenn die for-each-Schleife alle Elemente durchlaufen hat, prüfe die Variable ob sie auf true gesetzt worden ist, wenn
-> ja: Gib deine Benachrichtigung aus
-> nein: Nichts geschieht

Nichts anderes geschieht in meinem Code den ich gepostet hatte.


----------



## fiber (1. Nov 2014)

Besten Dank! 
Hab´s versucht:


```
public void bestimmteDetailsAusgeben(String suchbegriff)
    {
        boolean b = false;
        for ( String dateiname : dateien)
        {
            if( dateiname.contains(suchbegriff))
            {
                System.out.println(true);
            }
        }
    }
```


----------



## Flown (1. Nov 2014)

Also ich würde dir dringlichst raten Grundlagen zu lernen/aufzufrischen. Es hat keinen Sinn dir das Schritt für Schritt vorzubeten. 

Ich habe dir das jetzt in Prosa und auch als Analogie bereitgestellt.

Wo liegt denn das Problem jetzt?

Dir Fehlen bei deinem Programm noch 2 weitere Teile und zwar:

- Das setzen des boolean Flags
- Abfrage nach der for-each-Schleife ob das Flag gesetzt wurde!


----------



## fiber (1. Nov 2014)

da hast du wohl Recht. ich befasse mich erst mal mit den Grundlagen, ehe ich hier weiter mache. werde dann noch mal meine Ergebnisse posten, nachdem ich die Grundlagen gut beherrsche.


----------

