Werte in Array zählen und Summe der einzelnen Teile ausgeben

purzel

Bekanntes Mitglied
Hallo,

ich sitze derzeit an einer Art Umfrage. Die Frage und Antwortmöglichkeiten werden aus der Datenbank gelesen. Die Antworten werden gleich wie die User(ID) mit in die Datenbank eingetragen. Nun mein Problem:

Ich habe z.B. folgendes Array:
Code:
answers[] {0,1}
das aus 3 Antwortmöglichkeiten generiert wurde (1-3).0 = 1. Antwortmöglichkeit etc.

Das zählen geht noch, in dem ich einfach die Länge aus
Code:
answers[]
bestimme!

WIE zähle ich die einzelnen Werte? :rtfm:

in dem Fall wäre es:

Antwort 1: 1
Äntwort 2: 1
Antwort 3: 0

LG

purzel
 
Bin mir nicht sicher, ob das gemeint war, aber unter der Annahme, dass in answers wirklich nur Werte von 0 bis 2 auftauchen und gezählt werden soll, wie oft diese auftauchen, vielleicht so:

Java:
		int[] answers =  { 0, 1 };
		int[] counter = { 0, 0, 0 };
		
		for(int answer : answers) {
			counter[answer]++;
		}
		
		System.out.println("Antwort 1: " + counter[0]);
		System.out.println("Antwort 2: " + counter[1]);
		System.out.println("Antwort 3: " + counter[2]);
 
Deine Frage ist sehr umständlich formuliert. Was genau willst du?


"Das zählen geht noch"
Was für ein Zählen? Was willst du zählen?

(1-3).0 = 1
?? Das verstehe ich nicht.

Wenn du meinst, dass du zählen möchtest, wie oft eine bestimmte Antwort angeklickt wurde, nachdem die Antworten in die Datenbank eingetragen worden sind:

Java:
    public void foo()
    {
        String[] antwortmöglichkeiten = {"a","b","c"};
        String[] antworten = {"a","a","b","a","c","c","b","a"};
        int[] antwortenZähler = new int[antwortmöglichkeiten.length];
        for(int i = 0; i < antworten.length; i++)
        {
            for(int j = 0; j < antwortmöglichkeiten.length; j++)
            {
                if ( antworten[i].equals(antwortmöglichkeiten[j]) )
                {
                    antwortenZähler[j]++;
                }
            }
        }
        
        for(int i = 0; i < antwortenZähler.length; i++)
        {
            System.out.println("Antwort "+(i+1)+" wurde "+antwortenZähler[i]+" mal abgegeben");
        }
    }
 
Du könntest hierbei doch ein Binäres Zählsystem verwenden. Binäre Operatoren gibt es ja in Java (& und | "nur einmal tippen").

A1 = 1
A2 = 1
A3 = 0
-> 110 = 6

Wenn du "6" auflöst, bekommst du immer die exakte Folge zurück.
6 - 2^2 = 1; Rest 2
2 - 2^1 = 1, Rest 0
0 -> 0
= 110

Damit kannst du wensentlich mehr Werte in jeweils einem Integer speichern (und damit weiter arbeiten), was natürlich einfacher ist und im Endeffekt auch weniger Speicher benötigt.

Und bei dem wo du grad hängst musst du nur die Summe des Arrays dafür bilden/abfragen.
 
Die Frage und Antwortmöglichkeiten werden aus der Datenbank gelesen.
Und da kommt sowas wie
SQL:
SELECT COUNT(...
nicht in Frage? Oder gibt die Datenbankstruktur das nicht her?
 
Bin mir nicht sicher, ob das gemeint war, aber unter der Annahme, dass in answers wirklich nur Werte von 0 bis 2 auftauchen und gezählt werden soll, wie oft diese auftauchen, vielleicht so:

Java:
		int[] answers =  { 0, 1 };
		int[] counter = { 0, 0, 0 };
		
		for(int answer : answers) {
			counter[answer]++;
		}
		
		System.out.println("Antwort 1: " + counter[0]);
		System.out.println("Antwort 2: " + counter[1]);
		System.out.println("Antwort 3: " + counter[2]);

Ok, Danke für den Tipp, werde es demnächst ausprobieren!

Und da kommt sowas wie
SQL:
SELECT COUNT(...
nicht in Frage? Oder gibt die Datenbankstruktur das nicht her?

Mh, zählt mann damit nicht nur die Gesamtanzahl wie ich es gemacht habe mit
Code:
answers.length()
?
 
Mh, zählt mann damit nicht nur die Gesamtanzahl wie ich es gemacht habe mit answers.length() ?

Das kommt natürlich darauf an, wie du dein SQL gestaltest.
Machst du
Java:
Select Count(*) from tabelle
macht es keinen Unterschied.
Baust du aber noch eine "where"-Klausel ein
Java:
Select Count(*) from tabelle where antwort = 0
Bekommst du die Anzahl der Antworten die 0 sind zurück.
(entsprechend musst du dann noch eine Abfrage für 1 machen, denke aber das ist verständlich ;-) )
 
@IMartin:

Deine Version funktioniert, allerdings gab es bei dieser Übernahme deines Codes Errors. Ich habe die
Code:
for()
-Schleife umgebaut und die Variable counters angepasst. Das funtioniert jetzt wie gewünscht.

Danke!!

Liebe Grüße

purzel
 
Das kommt natürlich darauf an, wie du dein SQL gestaltest.
Machst du
Java:
Select Count(*) from tabelle
macht es keinen Unterschied.
Baust du aber noch eine "where"-Klausel ein
Java:
Select Count(*) from tabelle where antwort = 0
Bekommst du die Anzahl der Antworten die 0 sind zurück.
(entsprechend musst du dann noch eine Abfrage für 1 machen, denke aber das ist verständlich ;-) )

Es ist in der Tat umständlich, da meine Umfragen variabel sind. D.h. es können so oder so über 5 Antwortmöglichkeiten geben ^^
 
Es ist in der Tat umständlich, da meine Umfragen variabel sind. D.h. es können so oder so über 5 Antwortmöglichkeiten geben ^^
Dafür gibt es die GROUP BY-Klausel. Es lohnt sich, sich mit SQL zu beschäftigen. Das wird Dich am Ende sehr glücklich machen. 😀😀😀
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben