a-meg-s / episode-2-java

learning and testing a new programming language
0 stars 0 forks source link

Aufgabe 2: gerade/ungerade LED an- und ausschalten #2

Closed a-meg-s closed 11 months ago

a-meg-s commented 11 months ago

Aufgabe 2 Teilaufgabe 2.1 Erstellen Sie die Methode switchEvenOdd in der Klasse ClientApp, die anschliessend in der Methode main aufgerufen wird. In der Methode switchEvenOdd soll Folgendes gemacht werden:

  1. Lesen Sie (von der Tastatur) die Anzahl LEDs ein, die dem Steckboard hinzugefügt werden sollen. Die Anzahl LEDs sollte ein Vielfaches von 16 sein: z.B. 64, 80, 96 etc.
  2. Fügen Sie die gewünschte Anzahl LEDs dem Steckboard hinzu und halten Sie die Ausführung der switchEvenOdd für 2 Sekunden an, bevor es weiter geht.
  3. Schalten Sie alle LEDs ein, deren Nummer eine gerade Zahl ist. Mit welchem Operator kann bestimmte werden, ob es sich bei einer Zahl um eine gerade Zahl handelt oder nicht? Welche Kontrollstruktur eignet sich, wenn entschieden werden soll, ob etwas gemacht werden soll oder nicht?1
  4. Halten Sie die Ausführung der Methode switchEvenOdd für 1 Sekunde an, bevor es weiter geht.
  5. Schalten Sie jetzt alle LEDs um: jedes eingeschaltete LED wird ausgeschaltet, während jedes ausgeschaltete LED eingeschaltet wird.
  6. Halten Sie die Ausführung der Methode switchEvenOdd für 1 Sekunde an, bevor es weiter geht.
  7. Schalten Sie alle LEDs aus und halten Sie die Ausführung der Methode switchEvenOdd für 1 Sekunde an, bevor es weiter geht.
  8. Wiederholen Sie 3 Mal die letzten fünf Schritte (3, 4, 5, 6 und 7), um das Umschalten von LEDs besser veranschaulichen zu können. Wie kann dies am einfachsten erreicht werden?
  9. Setzen Sie am Schluss die Anzeige zurück.

Experimentieren Sie mit der Anzahl von LEDs und Verzögerungszeit, bis das Umschalten fliessend läuft und die beiden Zustände schön sichtbar werden. Versuchen Sie bei der Lösung der Aufgabe unterschiedliche Schleifentypen zu verwenden, um Vor- und Nachteile von unterschiedlichen Schleifentypen in bestimmten Situationen zu sehen. Die Ausführung der switchEvenOdd wird durch den Aufruf dieser Methode in der Methode main gestartet.

Teilaufgabe 2.2 (Fakultativ) Passen Sie die Methode switchEvenOdd so an, dass blaue LEDs verwendet werden. Sehen Sie sich dazu die API-Dokumentation der Enumeration LedColor an. Führen Sie die Methode switchEvenOdd aus und kontrollieren Sie, ob nur die blauen LEDs verwendet werden. Beachten Sie aber dabei, dass die ausgeschalteten LEDs immer grau sind. Somit ist die echte LED Farbe ausschliesslich im eingeschalteten Zustand sichtbar.

a-meg-s commented 11 months ago

package ch.hslu.informatik.prg.gruppenarbeit;

import ch.hslu.prg.leds.proxy.LedService; import java.util.Scanner;

public class ClientApp {

public static void SwitchEvenOdd(LedService led) {
    try {
        // 1. Read the number of LEDs to be added to the breadboard from the keyboard.
        Scanner scanner = new Scanner(System.in);
        System.out.print("Bitte geben Sie eine neue Zahl ein: ");
        int ledCount = scanner.nextInt();

        // 2. Check if the number of LEDs is a multiple of 16.
        if (ledCount % 16 != 0) {
            throw new RuntimeException("Die Anzahl LEDs muss ein Vielfaches von 16 sein: z.B. 64, 80, 96 etc.");
        }

        // 3. Add the desired number of LEDs to the breadboard and hold the execution of
        // `switchEvenOdd`
        // for 2 seconds before continuing.
        led.addLeds(ledCount);
        led.stopExecutionFor(2000);

        for (int i = 0; i < 3; i++) {
            // 4. Turn on all LEDs whose number is an even number.
            for (int ledNumber = 0; ledNumber < ledCount; ledNumber++) {
                if (ledNumber % 2 == 0) {
                    led.turnLedOn(ledNumber);
                } else {
                    led.turnLedOff(ledNumber);
                }
            }
            // Hold for 2 seconds.
            led.stopExecutionFor(2000);

            // 5. Turn on all LEDs whose number is an odd number.
            for (int ledNumber = 0; ledNumber < ledCount; ledNumber++) {
                if (ledNumber % 2 != 0) {
                    led.turnLedOn(ledNumber);
                } else {
                    led.turnLedOff(ledNumber);
                }
            }

            led.stopExecutionFor(1000);

            // Switch all LEDs.
            for (int ledNumber = 0; ledNumber < ledCount; ledNumber++) {
                led.turnLedOn(ledNumber);
            }

            // Hold for 2 seconds.
            led.stopExecutionFor(1000);

            // Turn off all LEDs.
            for (int ledNumber = 0; ledNumber < ledCount; ledNumber++) {
                led.turnLedOff(ledNumber);
            }

            // Hold for 2 seconds.
            led.stopExecutionFor(1000);
        } //
    } catch (Exception e) {
        System.out.println("An error occurred while executing SwitchEvenOdd().");
        e.printStackTrace();

        // Restart SwitchEvenOdd().
        SwitchEvenOdd(led);
    }
}
public static void main(String[] args) {

    // Instanzerstellung von LedService
    LedService led = new LedService();

    /*
     * Bsp. manuelle erstellung / Aufruf... led.addLeds(5); led.turnLedOn(2);
     * 
     */

    // Methodenaufruf LedsOnOff
    LedsOnOff(led);
    SwitchEvenOdd(led);
}

}

Zinga14 commented 11 months ago

Ich glaube es wäre gut, wenn wir hier noch eine Fehlermeldung einbauen würden, dass wenn kein Vielfaches von 16 eingegeben wurde, die Abfrage wiederholt wird...

a-meg-s commented 11 months ago

@Zinga14 ah ja ich hatte das in program später geschrieben, hab es aber vergessen einzufügen 👍 machi