Java :: Aufgabe #95

3 Lösungen Lösungen öffentlich

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:

1 Kommentar
vote_ok
von Syntax6 (420 Punkte) - 20.07.2015 um 20:16 Uhr
Quellcode ausblenden Java-Code
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);

	}

}
vote_ok
von Posic (130 Punkte) - 20.09.2015 um 18:03 Uhr

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) :).

Quellcode ausblenden Java-Code
/******************************************
*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.");
		 
	}
}
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++;
			}			
		}
	}
}
1813909

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.