MezData-Logo

Lösung 2021-So-FIA-A1

1.1 Quellcode aus Klassendiagramm erstellen

Quellcode [2021-So-FIA-A1-Lsg/src/Geraet.java]
public class Geraet{        // 6 Punkte
    private String id;
    protected boolean defekt = false;
    protected Nachrichtenschlange schlange;
 
    public Geraet(String id, Nachrichtenschlange s){
        this.id = id;
        schlange = s;
    }
    public String holeId(){
        return id;
    }
}
Quellcode [2021-So-FIA-A1-Lsg/src/Kaffeevollautomat.java]
public class Kaffeevollautomat extends Geraet { // 22 Punkte
    private int milch;
    private int kaffee;
    private int tassen;
 
    public Kaffeevollautomat(String id, Nachrichtenschlange s) {
        super(id,s);
    }
 
    public void fuelle(int kaffee, int milch) {
        this.kaffee += kaffee;
        this.milch += milch;
    }
 
    public void erzeugeTasseKaffee(boolean mitMilch) {
        boolean erzeugeTasse = true;
        double random = Math.random() * 100;
        if(defekt) return;
        if (random <= 2) {
            defekt = true;
            Nachricht n = new Nachricht(holeId(), "Mahlwerk defekt");
            schlange.neueNachricht(n);
            return;
        }
        if(mitMilch&&milch<10){
            schlange.neueNachricht(new Nachricht(holeId(),"Milch fehlt"));
            erzeugeTasse=false;
        }
        if (kaffee<25){
            schlange.neueNachricht(new Nachricht(holeId(),"Kaffee fehlt"));
            erzeugeTasse=false;
        }
        if(erzeugeTasse){
            System.out.print("Tasse Kaffe ");
            if(mitMilch){
                System.out.print("mit");
                milch -=10;
            }
            else System.out.print("ohne");
            System.out.println(" Milch ausgeben");
            kaffee-=25;
            tassen++;
            if (tassen%10==0){
                String s = tassen + "Tassen ausgegeben";
                schlange.neueNachricht(new Nachricht(holeId(),s));
            }
        }
    }
}
Quellcode [2021-So-FIA-A1-Lsg/src/Nachricht.java]
public class Nachricht {  // 4 Punkte
    private String id;
    private String text;
 
    public Nachricht(String id, String text){
        this.id = id;
        this.text = text;
    }
 
    public void drucke(){
        System.out.printf("%s : %s \n", id, text);
    }
}
Quellcode [2021-So-FIA-A1-Lsg/src/Nachrichtenschlange.java]
import java.util.ArrayList;     // 10 Punkte
 
public class Nachrichtenschlange {
    private ArrayList<Nachricht> liste = new ArrayList<Nachricht>();
 
    public void neueNachricht(Nachricht n) {
        liste.add(n);
    }
 
    public void drucke() {
        int i;
        System.out.println("Nachrichtenschlange");
        for (i = 0; i < liste.size(); i++) {
            System.out.print((i+1) + ". ");
            liste.get(i).drucke();
        }
    }
    public void drucke2() {
        int i=1;
        System.out.println("Nachrichtenschlange");
        for (Nachricht nachricht: liste) {
            System.out.print(i + ". ");
            nachricht.drucke();
            i++;
        }
    }
}

1.2 Testprogramm

Quellcode [2021-So-FIA-A1-Lsg/src/Main.java]
public class Main {         // 8 Punkte
    public static void main(String[] args) {
        Nachrichtenschlange ns = new Nachrichtenschlange();
        Kaffeevollautomat kv = new Kaffeevollautomat("Maximus R306", ns);
        kv.fuelle(700, 70);
        double random;
        for (int i = 0; i < 30; i++) {
            random = Math.random()*100;
            if (random <= 50) {
                kv.erzeugeTasseKaffee(true);
            } else {
                kv.erzeugeTasseKaffee(false);
            }
        }
        ns.drucke();
    }
}

Projekt mit IntelliJ: 2021-So-FIA-A1-Lsg.zip

Alle Klassen als PDF: 2021-So-FIA-A1-Lsg.pdf