Java :: Aufgabe #95
3 Lösungen

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.
Lösungen:

import java.util.Arrays; public class test { public static void main(String[] args) { int[] arr = { 42,3,5,42,8,65,3,2,2,2,2,5,26,42,78,4,1,42,1,65,99,42 }; int stelle = 0; int anzahl = 1; int anzahl_final = 0; Arrays.sort(arr); for (int i = 0; i < arr.length - 1; ++i) { if (arr[i] == arr[i + 1]) { ++anzahl; } if (anzahl_final < anzahl) { anzahl_final = anzahl; stelle = i; } if (arr[i] != arr[i + 1]) { anzahl = 1; } } System.out.println("Zahl: " + arr[stelle] + ", Häufigkeit: " + anzahl_final); } }
Zitat:
Newbie am Werk. Programmier noch nicht lange. Falls jemand Verbesserungen sieht würde ich mich freuen wenn man mir die mitteilt.
Kritik ist genauso gern gesehen(Solange es nicht persönlich wird) :).

/****************************************** *Das Häufigste Element in einem Array! * *Schreibe Sie ein Programm, das aus einem * *Array das häufigste Elemente findet. * *Sollte es mehrere gleicher Anzahl finden,* *so darf irgendein Element dieser * *Häugigsten ausgegeben werden. * ******************************************/ import javax.swing.*; class ArrayVergleichUebung { public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Guten Tag, hier ermitteln wir die Häufigsten Zeichen in einem Element."); String eingabe = JOptionPane.showInputDialog("Bitte ein Element mit max. 15 zeichen!"); //Int für die schleifen zählung int schleife; //Alle buchstaben die später identisch sind String dieBuchstaben = ""; //zählen wie viele buchstaben identisch sind int wievieleBuchstaben = 0; //Schauen wann ein buchstabe gleich ist boolean vergleich; //index Anzahl ints int buchstabefuer2 = 1; int buchstabe1 = 0; int buchstabe2 = 0; //Länge des Strings ermitteln int stringLaenge0 = eingabe.length(); int stringLaenge1 = (int)stringLaenge0; //Ermitteln der schleifen länge int schleifenLaenge =28; //rlyLaenge = Richtige Länge des Strings int rlyLaenge = stringLaenge1-1; //Benutzer eingabe einfuegen in einem CharArray char[] chars = eingabe.toCharArray(); if(stringLaenge1 == 2 || stringLaenge1 == 3) { schleifenLaenge = (int)stringLaenge1*1; } else if(stringLaenge1 == 4) { schleifenLaenge = (int)(stringLaenge1*1.5d); } else if(stringLaenge1 == 5) { schleifenLaenge = (int)stringLaenge1*2; } else if(stringLaenge1 == 6) { schleifenLaenge = (int)(stringLaenge1*2.5d); } else if(stringLaenge1 == 7) { schleifenLaenge = (int)stringLaenge1*3; } else if(stringLaenge1 == 8) { schleifenLaenge = (int)(stringLaenge1*3.5d); } else if(stringLaenge1 == 9) { schleifenLaenge = (int)stringLaenge1*4; } else if(stringLaenge1 == 10) { schleifenLaenge = (int)(stringLaenge1*4.5d); } else if(stringLaenge1 == 11) { schleifenLaenge = (int)stringLaenge1*5; } else if(stringLaenge1 == 12) { schleifenLaenge = (int)(stringLaenge1*5.5d); } else if(stringLaenge1 == 13) { schleifenLaenge = (int)stringLaenge1*6; } else if(stringLaenge1 == 14) { schleifenLaenge = (int)(stringLaenge1*6.5d); } else if(stringLaenge1 == 15) { schleifenLaenge = (int)stringLaenge1*7; } else if(stringLaenge1>15) { JOptionPane.showMessageDialog(null, "Bitte führen sie das programm nochmal aus, mit max. 15 Zeichen!"); System.exit(0); } for(schleife=0;schleife<=schleifenLaenge;) { buchstabe2 = buchstabefuer2; for(;buchstabe2<=rlyLaenge;) { vergleich = (chars[buchstabe1] == chars[buchstabe2]); if(vergleich == true) { wievieleBuchstaben++; dieBuchstaben += chars[buchstabe1]; vergleich = false; } buchstabe2++; } buchstabefuer2++; buchstabe1++; schleife++; } JOptionPane.showMessageDialog(null, "Es sind " + wievieleBuchstaben + " paar Zeichen gleich. Es sind die " + "|" + dieBuchstaben + "|" + "'s die geich sind."); } }
Ich habe das ganze etwas erweitert... :)
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++; } } } }