Array - Vorkommen der einzelnen Werte ausgeben

Status
Nicht offen für weitere Antworten.

fiend

Mitglied
Hallo zusammen :)

Bin fast am verzweifeln, da ich auf diese einfache Lösung nicht komme.

Zunächst die Beschreibung:

Ich lese von der Konsole verschiedene Int-Werte ein, die ich dann in einem Array speicher.
Dann sortiere ich den Inhalt in aufsteigender Reihenfolge.

So.
Bis dahin hab ich alles übersichtlich in Methoden gekapselt, die eine liest int-werte ein bis der Benutzer
"stop" eingibt und hat als Rückgabe-Typ das Int-Array.
Die nächste bekommt das Array übergeben und sortiert das ganze schön.

Jetzt habe ich das schön sortierte Array und möchte den Inhalt gefolgt von dem Vorkommen der jeweiligen Einträge ausgeben.
Ich bin bei folgendem angelangt:
Code:
public void countElementsInIntArray(int[] ir){
		sortAscend(ir); // Meine Sortier-Methode
		int anzahl;
		for(int i = 0; i < ir.length-1; i++){
			anzahl = 1;
			for(int j = i+1; j < ir.length; j++){
				if(ir[i] == ir[j]){
					anzahl++;	
					if(ir[j]!=ir[i]){
						al.add(ir[i]);
						al.add(anzahl);
					}
				}	
			}
			System.out.println("Die Zahl " + ir[i] + " kommt " + anzahl + " mal vor.");
		}
}

Soweit so schön, die Methode erzeugt aber leider sinnlosen Output:
Wenn der User beispielsweise
12
12
14
12
eingibt,
Ist die Ausgabe:
Die Zahl 12 kommt 3 mal vor.
Die Zahl 12 kommt 2 mal vor.
Die Zahl 12 kommt 1 mal vor.
Die Zahl 14 kommt 1 mal vor.

Wie ihr euch denken könnt, möchte ich Redundanz ausschliessen, d.h. als Ausgabe möchte ich folgendes haben:
Die Zahl 12 kommt 3 mal vor.
Die Zahl 14 kommt 1 mal vor.

Ich weiss, die Lösung liegt näher als ich denke, aber ich checks grad wirklich nicht ^^

Danke im vorraus + Grüße ;)
 

Leroy42

Top Contributor
Wenn dein Array schon sortiert ist, kannst du diese Eigenschaft
doch nutzen:

Code:
      for(int i = 0; i < ir.length; i++){ 
         int anzahl = 1; 
         int j = i+1;
         for (; i < ir.length; ++j)
           if (ir[j] != ir[i])
             break;
         int anzahl = j-i;
         System.out.println("Die Zahl " + ir[i] + " kommt " + anzahl + " mal vor."); 
      }

So im Prinzip, ich hab's aber nicht getestet.
 

fiend

Mitglied
Probiers mal aus, danke...
aber meiner Logik nach zählt er dann nicht das Vorkommen.
Ich möchte ja schon das komplette Vorkommen der eingegebenen Zahlen berücksichtigen.
Aber ich probiers erstmal ;)

[EDIT]
Das tuts leider überhaupt nicht :D
Jetzt werden immer noch ALLE vorkommenden Zahlen ausgegeben und zusätzlich
noch das Vorkommen, welches überhaupt nicht stimmt...
[/EDIT]
 

Leroy42

Top Contributor
Sorry, mein Fehler.

Ich habe vergessen, nach Beendigung der inneren Schleife,
die alle gleichen Vorkommen überliest, die Variable
i enstprechend anzupassen. Also

Code:
for(int i = 0; i < ir.length; i++) { 
         int j = i+1; 
         for (; j < ir.length; ++j) 
           if (ir[j] != ir[i]) 
             break; 
         int anzahl = j-i; 
         System.out.println("Die Zahl " + ir[i] + " kommt " + (j-i) + " mal vor."); 
         i = j-1;
      }
Ich hoffe, jetzt klappts
 

fiend

Mitglied
Super vielen vielen Dank!
So klappts natürlich.

Ich wäre im nächsten Schritt so vorgegangen, dass ich
einen int-behälter zum zwischenlagern genutzt hätte:
Code:
int temp = ir[i];

schleife 1
  schleife 2
und dann bedingung gestellt: falls ir[j]== ir --> dann anzahl inkrementieren
nächste bedingung: falls ir[j]!= ir --> abbruch der schleife und ausgabe der temp-variable + anzahl.

das hätte den vorteil, dass man nicht innerhalb der schleifen die index-werte verändern muss.
ver_un_kompliziert das ganze...

hoffe konnte das so deutlich machen, habs noch nicht programmiert ;)
aber folgt später noch...

MERCI
 

Leroy42

Top Contributor
Deine Idee funktioniert sicher auch und daß ich innerhalb
der Schleife an der Laufvariable herummurkse gefällt
mir eigenlich auch nicht wirklich (Algol68, Pascal und Modula
verbieten sowas von Haus aus).

Aber auf die Schnelle hatte ich keine Lust, sauber
2 while-Schleifen zu coden.
 
G

Guest

Gast
Moin nochmal...

erstmal danke für deine Anregung, hier meine(deine;)) Lösung:

Code:
static public void countElementsInIntArray(int[] ir){
		// Falls kein einziges Element in dem Array gespeichert ist,
		// brauchen wir den nachfolgenden Klimbim nicht ;)
		if(ir.length == 0){
			System.out.println("Keine Elemente enthalten.");
			return;
		}
		// Zunächst müssen wir die Zahlen sortieren
		sortAscend(ir);
		
		// Als erstes brauchen wir einen Behälter, 
		// in dem wir die "uniquen" Elemente speichern:
		int uniqueElement;
		
		for(int i = 0; i < ir.length; i++){
			// uniqueElement erhält den Wert des aktuellen Elementes
			uniqueElement = ir[i];
			// anzahl wird auf 1 gesetzt, da wir davon ausgehen können, 
			// dass das Element jetzt mindestens einmal vorhanden ist
			int anzahl = 1;
			
			for(int j = i+1; j < ir.length; j++){
				// Damit wir Redundanz in der Ausgabe vermeiden,
				// wird bei Ungleichheit zum nächsten Element
				// der Durchlauf abgebrochen
				if(ir[j] != ir[i]){	
					break;
				}
				// Da jetze sicher ist, dass auch dieses Element mit dem vorherigen identisch ist, 
				// wird anzahl inkrementiert
				anzahl++;
				// Zählindex i wird dann auf j gesetzt, da
				// alle Nachfolger von i den gleichen Wert haben;
				// Durch die if-Abfrage wissen wir, das j im Falle
				// eines Abbruchs dem Index eines neuen "uniquen" Element entspricht
				// (Der Index, an dem das neue Element das erste mal auftaucht!)
				i = j;
			} // innere loop
                 }

So funktionierts schonmal.
Der ders jetze sehen will, meckert nartürlich zu Recht:
Da es vorher sortiert wurde, brauchen wir keine zwei for-loops.

So ist jetzt mein einfacher Ansatz für die nächste Lösung:
Code:
...
int uniqueElement;
for(int i = 0; i < ir.length-1; i++){
    int anzahl = 1;
    uniqueElement = ir[i];
    if(ir[i] != ir[i+1){
        System.out.println("Die Zahl " + uniqueElement + " kommt " + anzahl + " mal vor." );
        anzahl = 1;
    } else{
         anzahl++;
    }
}
...

Sorry, kann falsch sein, aber dem Ansatz nach müsste es klappen.
(hab meine Lösung nicht dabei, muss es aus dem Kopf nachvollziehen)

Jetzt gibts natürlich das Problem, das es IndexOutOfBounds gibt, wenn ich aber die loop nur bis ir.length-2 zähle, wird das letzte Element nicht ausgegeben.

Hoffe es ist klar wie ichs meine :)=

Wie gehe ich jetzt weiter vor?
Mein Problem ist, wenn ich zulange an dem einen Problem sitze, sehe ich den Wald vor lauter Bäumen nicht mehr *grins

Hoffe ihr könnt mir weiter helfen.
Bye und Grüße :)
 
G

Guest

Gast
So ich nochmal ???:L

Nach langer überlegung *grins
bin ich der Sache jetzt näher gekommen:

Meines Erachtens kann man das Problem (sortiert oder unsortiert) nur mit 2 Loops lösen.
Grund:
Entweder bekommt man eine IndexOutOfBoundsException oder kommt nicht an das letzte Element (bzw die Ausgabe dessen).

Jetzt lass ich es wie folgt:

Code:
...
int counter;
for(int i = 0; i < ir.length; i+=counter){
	counter = 1;
	for(int j = i+1; j < ir.length; j++){
		if(ir[i] == ir[j]){
			counter++;
		}
	}			
	System.out.println("Die Zahl " + ir[i] + " kommt " + counter + " mal vor.");
}
...

(ir ist das der Methode übergebene Array)

Sorry für die Selbstgespräache, aber tut manchmal gut sich auf die Couch zu legen und einfach mal von seinen Problemen berichten ^^

Bye + Danke nochmals!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
B seltenes Vorkommen eines Integers in einem Array Java Basics - Anfänger-Themen 13
J Array; Vorkommen zählen Java Basics - Anfänger-Themen 10
D Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen Java Basics - Anfänger-Themen 20
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
H Methoden Array auf Vorkommen eines Integers überprüfen Java Basics - Anfänger-Themen 2
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben