Java :: Aufgabe #95 :: Lösung #3

3 Lösungen Lösungen öffentlich
#95

Das Häufigste Element in einem Array

Anfänger - Java von klhlubek19 - 16.07.2015 um 13:46 Uhr
Schreiben Sie ein Programm, das aus einem Array das häufigste Element findet. Sollte es mehrere gleicher Anzahl finden, so darf irgend ein Element dieser Häufigsten ausgegeben werden.
#3
vote_ok
von guandi (230 Punkte) - 14.11.2018 um 16:29 Uhr
Ich habe das ganze etwas erweitert... :)

Quellcode ausblenden Java-Code
package filterNamesByFrequency;

import java.util.Arrays;

public class FrequencyFilterApp {

	public static void main(String[] args) {

		String[] names = {"adam", "adam", "eva", "paul", "adam", "eva", "hans"}; 
		int[] nameCounter = new int[names.length]; 

		countEqualNamesByName(names, nameCounter);
		namesAndCounterOutput(names, nameCounter); 
	}

	// Ausgabe der Namen und der Menge wie oft sie im Array enthalten sind
	private static void namesAndCounterOutput(String[] names, int[] nameCounter) {
		int i = 0;
		for(int count: nameCounter) {
			if(count == 0) {
				// Zur Vermeidung von doppelten Ausgaben da nur das erste Auftauchen eines Namens die Menge enthält 
				i++;
				continue;
			}else {
				System.out.println("Name: " + names[i]);
				System.out.println(count);
				i++;
			}
		}
	}

	
	// Sortieren des Arrays und Zählen der Anzahl der selben Namen
	private static void countEqualNamesByName(String[] names, int[] nameCounter) {
		int namePointer = 0; 	// Der namePointer zeigt bei speichern der Menge zu dem Passenden Namen
		String nameHolder = "";	// Platzhalter um doppelte Namen zu überspringen

		Arrays.sort(names);		// Array nach dem Alphabet sortieren
		
		for(String name : names) {
			if(nameHolder.equalsIgnoreCase(name)) {	
				// Prüfen ob der Platzhalter den gleichen Namen enthält wie der zu Zählende Name
				// wenn ja wird der Pointer hoch gezählt und der nächste Name kommt dran
				namePointer++;
				continue;
			}else {
				// Sollten die Namen nicht übereinstimmen rufen wir die Schleife zum Zählen der doppelten Namen auf
				for(String nameX:names) {
					if(name.equalsIgnoreCase(nameX)) {
						nameCounter[namePointer] ++;
					}
				}
				nameHolder = name;	
				// Übergabe des aktuellen Namens an den Platzhalter zum überspringen doppelter Zählungen
				namePointer++;
			}			
		}
	}
}

Kommentare:

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

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