Java :: Aufgabe #352 :: Lösung #2

2 Lösungen Lösungen öffentlich
#352

Turmspringen/Wasserspringen (Punktewertung)

Anfänger - Java von JKooP - 02.04.2021 um 09:28 Uhr
Bei internationalen Wettkämpfen bewerten in Einzelwettbewerben sieben Wettkampfrichter die Sprünge.
Jeder vergibt pro Sprung 0 bis 10 Punkte, mit Schritten von halben Punkten.
Die zwei höchsten und niedrigsten Wertungen werden gestrichen.
Die verbleibenden drei Wertungen werden addiert und das Ergebnis mit dem Schwierigkeitsgrad multipliziert.
Das Endresultat entspricht der erzielten Punktzahl des Springers.

Beispiel 1:
Schwierigkeitsgrad: 2,1
Punkte: 7,5 | 7,5 | 7,0 | 8,0 | 8,0 | 7,5 | 8,5
Gestrichen: 7,5 | 7,5 | 7,0 | 8,0 | 8,0 | 7,5 | 8,5
Wertung: 7,5 + 7,5 + 8,0 = 23 * 2,1 = 48,3

Beispiel 2:
Schwierigkeitsgrad: 1,6
Punkte: 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5
Gestrichen: 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5
Wertung: 7,5 + 7,5 + 7,5 = 22,5 * 1,6 = 36

Erstelle eine Methode/Funktion, mit der die obige Aufgabenstellung gelöst werden kann.

Viel Spaß
#2
vote_ok
von CyoSplatoon (160 Punkte) - 04.05.2021 um 13:17 Uhr
Quellcode ausblenden Java-Code
import java.util.ArrayList;
import java.util.Locale;

import javax.swing.JOptionPane;

public class Task352 {

	public static void main(String[] args) {
		ArrayList<Double> a = new ArrayList<Double>();
		double score = 0;
		double diff = 0;
		int judges;
		int rule;

		do {
			do {
				judges = Integer.parseInt(JOptionPane.showInputDialog("Bitte geben Sie die Anzahl der Richter ein: "));
				rule = Integer.parseInt(JOptionPane
						.showInputDialog("Wie viele Zahlen sollen vom Maximum und Minimum gestrichen werden?"));
			} while (!validate(judges, rule));

			for (int i = 0; i < judges; i++) {
				a.add(input(i, true));
			}
			diff = input(0, false);

			clean(a, rule);
			score = conclude(a, diff);

		} while (JOptionPane.showConfirmDialog(null,
				"Die End-Punktzahl lautet: " + toString(a, diff) + score + "\nNeue Punktzahl berechnen?", "Aufgabe 352",
				0) == 0);
	}

	private static String toString(ArrayList<Double> a, double diff) {
		String s = "";

		for (int i = 0; i < a.size(); i++) {
			if (i < a.size() - 1) {
				s += a.get(i) + "+";
			} else {
				s += a.get(i);
			}
		}
		s += "*" + diff;
		return s + "= ";
	}

	private static double conclude(ArrayList<Double> a, double d) {
		double r = 0;
		for (int i = 0; i < a.size(); i++) {
			r += a.get(i);
		}
		return Double.parseDouble(String.format(Locale.ENGLISH, "%.1f", r * d));
	}

	private static boolean validate(int judges, int rule) {
		if (judges - rule * 2 > 0) {
			return true;
		}
		JOptionPane.showMessageDialog(null, "Diese Einstellungen sind nicht erlaubt.", "Aufgabe 352", 0);
		return false;
	}

	private static void clean(ArrayList<Double> a, int rule) {

		for (int i = 0; i < rule; i++) {
			int max = 0;
			for (int j = 0; j < a.size(); j++) {
				if (a.get(j) > a.get(max)) {
					max = j;
				}
			}
			a.remove(max);
		}

		for (int i = 0; i < rule; i++) {
			int min = 0;
			for (int j = 0; j < a.size(); j++) {
				if (a.get(j) < a.get(min)) {
					min = j;
				}
			}
			a.remove(min);
		}
	}

	private static double input(int i, boolean b) {
		if (b) {
			return Double.parseDouble(JOptionPane
					.showInputDialog("Bitte geben Sie die vergebene Punktzahl von Richter " + (i + 1) + " ein:"));
		}
		return Double.parseDouble(JOptionPane.showInputDialog("Bitte geben Sie die Schwierigkeitsstufe ein:"));
	}
	/*
	 * Zur Erläuterung: Ich habe diese Aufgabe ein bisschen erweitert, indem man die
	 * Anzahl der Richter und die Punktestreichung im Programm selbst regulieren
	 * kann. Wäre vielleicht auch die schwierigere Variante.
	 */
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben