Boolsches Flag

fiber

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

Java:
  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:

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

hier der komplette Quellcode:

Java:
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

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

Ich mal dir jetzt einmal ein Gegenbeispiel an die Tafel:

Java:
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

Bekanntes Mitglied
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

Administrator
Mitarbeiter
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

Bekanntes Mitglied
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

Administrator
Mitarbeiter
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

Bekanntes Mitglied
Besten Dank!
Hab´s versucht:

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

Flown

Administrator
Mitarbeiter
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

Bekanntes Mitglied
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.
 

Neue Themen


Oben