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
2092778

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.