FrequenzMatrix erzeugen für Häufigkeiten

Dragonball

Grünschnabel
Aus ArrayList eine FrequenzMatrix erzeugen für Häufigkeiten?

Hallo,
ich bin eher ein Anfänger und brauche hilfe Mein Programm soll folgendes machen können:

Als Input soll das Programm getFrequenzMatrix eine ArrayList (Modulkontextwechsel) z.B <2,7,7,9,2,7> bekommen.
Die Klasse FreqM nimmt die erste und zweite Element von der ArrayList [0]=2 und [1]=7 raus und setzt es auf eins, d.h. counter_2_7 = 1 und speichert es an der Stelle Matrix m[2][7].

Danach nimmt er denn 7 und 9 aus der ArrayList raus und setzt es auf eins, d.h. counter_7_9= 1 und speichert es an der Stelle Matrix m[7][9].

Danach nimmt er denn 2 und 7 aus der ArrayList raus und setzt es auf eins, d.h. counter_7_9 = 1und speichert es an der Stelle Matrix m[7][9], da aber es schon gesehen ist, setzt counter_7_9 = 2.

2 zu 7 in Matrix speichern an der Position m[2][7]= counter_2_7 mit Häufigkeiten Wert=1
7 zu 9 ... m[7][9]= counter_7_9 ...Wert=1
2 zu 7 ... m[2][7] = counter_2_7 ...Wert=2 (da 2xmal)

Ich erzeuge vorher eine Matrix und speichere die Häufigkeiten:

public class FreqM {

public static int[][] m = new int[10][10];
public static ArrayList <Integer> liste = new ArrayList<Integer>();
public static void printFreqListe () {
System.out.println(m);
}

public static void getFreqM(ArrayList liste){ //z.B als Eingabe <2,7,7,9,2,7>
int count_0_0 = 0;
....
int count_2_7 = 0;
..
int count_7_9 = 0;
...
int count_9_9 = 0;

.....

a[1][0] = ...
....
a[2][7] = counter_2_7 //Wert 1, danach wenn nochmal, dann Wert 2,...
...
a[7][9] = counter_7_9 // Wert 1
...
a[9][9] = ...

Ich hoffe, dass ich es etwas verständlich erklärt habe=( ?
Wie kann man es am Besten umsetzten?

ArrayList <(2,7),(7,9),(2,7)> //Die Klammern sind nur zur Verdeutlichung
Aus ArrayList eine Frequenzmatix erzeugen! 2,7 kommt 2xmal und 7,9 einmal vor.

|1_|2_ .._7_8_9
1 |
2 |_____2___
.. |
7 |_________1
8 |
9 |


MFG.
 
Zuletzt bearbeitet:
Hallo,

wenn du sowieso schon ein zweidimensionales Array hast, kannst du dir die Hilfsvariablen counter_x_y auch sparen und direkt auf die Arrayeinträge zugreifen. Zum Durchlaufen der ArrayList könntest du einen Iterator verwenden.

Grüße, Matthias
 
Hi, Matthias!

Danke erstmal für deine schnelle Antwort =). Wie würde der Code aussehen? Ist es aufwendig, da ich Anfänger bin und weiß leider nicht wie ich anfangen soll?

Gruss,
Kid
 
Hallo Kid,

ich habe gerade keinen Java-Compiler zur Hand, deswegen möglicherweise nur fast korrektes Java:
Java:
Iterator<Integer> it = liste.iterator();
while (it.hasNext()) {
  int i = it.next().intValue(); // Ersten Wert des Paares holen
  int j = it.next().intValue(); // Zweiten Wert des Paares holen
  m[i][j]++; // Zähler in der Häufigkeitsmatrix erhöhen
}

Grüße, Matthias
 
Hi, Matthias

ich habe es ausprobiert und es läuft nicht =(. Bestimmt sind da jede Menge von Anfängerfehler. Weiß leider nicht weiter...
Mein Programm sieht wie folgt aus:
Code:
import java.util.ArrayList;
import java.util.Iterator;

public class FreqM1 {

	//public static ArrayList <Integer> liste = new ArrayList<Integer>();
	
	public static void main(String argv[]){
		
	int listeTest1[] = {
			1,2,
			2,3,
			1,2,
	};
	
	System.out.println(listeTest1); // ListeTest1 ausgeben
	
	int[][] m1 = new int[3][3];
	
	public static void FreqM1(ArrayList listeTest1){
		
		Iterator<Integer> it = listeTest11.iterator();
		while (it.hasNext()) {
		  int i = it.next().intValue(); // Ersten Wert des Paares holen
		  int j = it.next().intValue(); // Zweiten Wert des Paares holen
		  m1[i][j]++; // Zähler in der Häufigkeitsmatrix erhöhen, z.B [1][2]=1
		  m1[j][i]++; // Zähler in der Häufigkeitsmatrix erhöhen auch bei [2][1]=1
		              // wegen Spielung der Matrix an der Diagonale!
			}	
		System.out.println(m1); //Matrix ausgeben
		
		}
	}
}
 

Neue Beiträge

Zurück