Statistik

Status
Nicht offen für weitere Antworten.
Code:
class Besucher{
 private int alter;
 private char geschlecht;

Besucher(int alterk, char geschlechtk){						//Konstruktor
alter = alterk; geschlecht = geschlechtk;
}

//get und set Methoden ////////////////////////////////////////////////////////////////////////
public int getAlter(){
	return alter;
}

public char getGeschlecht(){
	return geschlecht;
}

public void setAlter(int neuesAlter){
alter = neuesAlter;
}

public void setGeschlecht(char neuesGeschlecht){
	geschlecht = neuesGeschlecht;

}

}

///////////////////////////////Anwendung/////////////////////////////////////////////////////////

class Anwendung{
public static void main(String args[]){

	Besucher[] P = new Besucher[100];				//Objekt

	for (int i=0; i < 100; i++){

	char weiblich = 'w';
	char maennlich = 'm';

	P[i] = new Besucher();

	P[i].setAlter ((int)Math.random()*101);			//Alter liegt zwischen 0 und 101


	int Hilfszahl = (int)Math.random()*2;

	//Geschlecht wird mittels Hilfsvariablen zufällig bestimmt
	if(Hilfszahl == 1)
	P[i].setGeschlecht(weiblich);

	if(Hilfszahl == 0)
	P[i].setGeschlecht(maennlich);

/////////////////////////Statistik/////////////////////////////////////////////////////////////////

}
int u = 0;
int gesamtAlter = 0;

while (u < P.length){
	gesamtAlter = gesamtAlter + P[u];
	u++;

int durchschnittsalter = gesamtAlter/(P.length);
System.out.println("Durchschnittsalter:" +durchschnittsalter);

}




	}
}

Dieses Programm soll veranschaulichen welche Teilnehmer Statistisch an einer Veranstaltung Teilnehem. Hierbei soll nur das Durchschnittsalter sowie das Geschlecht berücksichtigt werden.

Oben zu sehen ist mein Ansatz zu dieser Problemstellung, leider erhalte ich noch 2 Fehlermeldungen...

test3.java:41: cannot resolve symbol
symbol : constructor Besucher ()
location: class Besucher
P = new Besucher();
^
test3.java:62: operator + cannot be applied to int,Besucher
gesamtAlter = gesamtAlter + P;
^
2 errors

wobei mir hier nicht klar ist wieso nicht auf den Konstruktor zugegriffen werden kann...bzw. warum ich das gesamtalter des Arrays nicht bestimmen kann. Wäre nett wenn mir jmd. weiterhelfen könnte :)
 

nollario

Bekanntes Mitglied
du verwendest in der klasse den konstruktor besucher(), aber in der klasse Besucher existiert nur ein Konstruktor mit Parametern! That goes not...
 
Erstmal vielen Dank für die schnelle Antwort...das würde dann heissen das ich an dieser Stelle einen Standartkonstruktor nehmen muss oder?

Code:
class Besucher{
 private int alter;
 private char geschlecht;

Besucher(){						//Konstruktor

}
 
Ich hab das Programm jetzt mal wie folgt verändert durch den Standartkonstruktor werden nun aber alle Werte auf Null gesetzt bzw. auf den Standartwert und so Lautet auch das Ergebnis des Durchschnittsalters.


Code:
class Besucher{
 private int alter;
 private char geschlecht;

Besucher(){						//Konstruktor

}

//get und set Methoden ////////////////////////////////////////////////////////////////////////
public int getAlter(){
	return alter;
}

public char getGeschlecht(){
	return geschlecht;
}

public void setAlter(int neuesAlter){
alter = neuesAlter;
}

public void setGeschlecht(char neuesGeschlecht){
	geschlecht = neuesGeschlecht;

}

}

///////////////////////////////Anwendung/////////////////////////////////////////////////////////

class Anwendung{
public static void main(String args[]){

	Besucher[] P = new Besucher[100];				//Objekt

	for (int i=0; i < 100; i++){

	char weiblich = 'w';
	char maennlich = 'm';

	P[i] = new Besucher();

	P[i].setAlter ((int)Math.random()*101);				//Alter liegt zwischen 0 und 101


	int Hilfszahl = (int)Math.random()*2;

	//Geschlecht wird mittels Hilfsvariablen zufällig bestimmt
	if(Hilfszahl == 1)
	P[i].setGeschlecht(weiblich);

	if(Hilfszahl == 0)
	P[i].setGeschlecht(maennlich);

/////////////////////////Statistik/////////////////////////////////////////////////////////////////

}
int u = 0;
int gesamtAlter = 0;

while (u < P.length){
	gesamtAlter = gesamtAlter + P[u].getAlter();
	u++;


}
int durchschnittsalter = gesamtAlter/(P.length);
System.out.println("Durchschnittsalter:" +durchschnittsalter);


	}
}
 

Isaac

Bekanntes Mitglied
Wenn du nur einen Standartkonstruktor hast brauchst du keinen Konstruktor :bae:


Wenn kein Konstruktor definiert ist benutzt Java automatisch den Standartkonstruktor. Ist ein Konstruktor definiert der nicht dem Standartkonstruktor entspricht fügt Java auch keinen solchen ein. Ich hoffe das konnte man verstehen.
 
G

Guest

Gast
Also das mit dem Standartkonstuktor ist mir einigermaßen klar dennoch weiss ich nicht so recht was ich anderst machen muss *G*...
 
Code:
class Besucher{
 private int alter;
 private char geschlecht;

public Besucher(int alterK, char geschlechtK){						//Konstruktor
alter = alterK; geschlecht = geschlechtK;

}
public Besucher(){													//Standartkonsturktor

}
//get und set Methoden ////////////////////////////////////////////////////////////////////////
public int getAlter(){
	return alter;
}

public char getGeschlecht(){
	return geschlecht;
}

public void setAlter(int neuesAlter){
alter = neuesAlter;
}

public void setGeschlecht(char neuesGeschlecht){
	geschlecht = neuesGeschlecht;

}

}

///////////////////////////////Anwendung/////////////////////////////////////////////////////////

class Anwendung{
public static void main(String args[]){

	Besucher[] P = new Besucher[100];				//Objekt

	for (int i=0; i < 100; i++){

	char weiblich = 'w';
	char maennlich = 'm';

	P[i] = new Besucher();

	P[i].setAlter ((int)Math.random()*101);				//Alter liegt zwischen 0 und 101


	int Hilfszahl = (int)Math.random()*2;

	//Geschlecht wird mittels Hilfsvariablen zufällig bestimmt
	if(Hilfszahl == 1)
	P[i].setGeschlecht(weiblich);

	if(Hilfszahl == 0)
	P[i].setGeschlecht(maennlich);

/////////////////////////Statistik/////////////////////////////////////////////////////////////////

}
int u = 0;
int gesamtAlter = 0;

while (u < P.length){
	gesamtAlter = gesamtAlter + P[u].getAlter();
	u++;
System.out.println("Test" +gesamtAlter);

}
int durchschnittsalter = gesamtAlter/(P.length);
System.out.println("Durchschnittsalter:" +durchschnittsalter);


	}
}

Um genau zu sein hab ich keine Fehlermeldung mehr beim Kompilieren. Dennoch funktioniert das Programm nicht wie gewünscht *G*. Das mit den beiden Konstruktoren hab ich aus einem Beispiel entnommen das ich gefunden habe...wobei ich Ehrlichgesagt nicht verstehe warum 2 Konstruktoren in einem Programm den Fehler "behoben" haben. Als Ausgabe des Durchschnittsalters erhalte ich wie zuvor 0. Leider weiss ich nicht wie ich die Fehlfunktion beheben kann...[/quote]
 

Jaraz

Bekanntes Mitglied
Whiskey Outpost hat gesagt.:
Code:
	P[i].setAlter ((int)Math.random()*101);				//Alter liegt zwischen 0 und 101

[/quote]

Codet ihr eigentlich alle ohne Debugger? ;)

Du castest Math.random() nach int, da Math.random() immer zwischen 0 und 1 ist, ist in allen Fällen dein int 0.
Dann machst du 0*101, bleibt also 0.

Füge entsprechende Klammern hinzu, dann funzt es.
P[i].setAlter ((int)(Math.random()*101));

Gruß Jaraz
 
Vielen dank jetzt funktioniert es ;-)
Naja ich verwende nen einfachen Editor "TextPad" und habe nie wirklich gelernt mit dem debugger umzugehen. So kann ich, glaube ich zumindest, nur in einem DosFenster debuggen?!
 

Jaraz

Bekanntes Mitglied
Also, ich bin zwar auch der Ansicht, dass man am Anfang alles mal in einem Texteditor gemacht haben sollte, aber nachdem man weiß wie man von Hand Klassen anlegt, compiliert, startet, packages einbindet, ein jar erzeugt usw, würde ich im Alltag doch recht schnell zu einer IDE greifen.

Das Try and Error hält einen doch zu sehr auf.

So mache ich das auch in einer einwöchigen Schulung. Bis zur ersten Pause nur die Grundlagen im Editor und nach 2 Stunden dann direkt Eclipse. Wenn man jemanden hat, der einem die IDE ein bisschen erklärt und man sich die Einstiegstutorien anschaut, geht das recht fix. Auch wenn eclipse oder andere IDEs auf den ersten Blick furchtbar kompliziert aussehen.

Zwischendurch wird dann immer mal wieder auf der Kommandozeile etwas nachvollzogen, damit die Teilnehmer auch mitbekommen was im Hintergrund abläuft.

Gruß Jaraz
 
Nun wollte ich die Zufällig erstellten werte durch werte die sich in einem Textdokument befinden ersetzen und habe hierzu java.io importiert nun wollte ich die importierten daten in ein Array speichern welches ich dann mit dem Substring auslesen will um die statistischen werte zu bestimmen. Nun lautet meine frage wie kann ich den File Input in einen String Speichern bzw. wie kann ich sonst auf den Input zugreifen?




Code:
import java.io.*;

class Besucher{
	 private int alter;
	 private char geschlecht;

	public Besucher(int alterK, char geschlechtK){						//Konstruktor
	alter = alterK; geschlecht = geschlechtK;							//Platzhalter zur möglichen erstellung weiterer Objekte der Klasse Besucher
	}
	public Besucher(){													//Standartkonstruktor
	}

//	get und set Methoden ////////////////////////////////////////////////////////////////////////
	public int getAlter(){
		return alter;
	}

	public char getGeschlecht(){
		return geschlecht;
	}

	public void setAlter(int neuesAlter){							//Hier könnte man noch bedingungen Hinzufügen das die Eingabe von z.B. einem Alter über 110 Jahren unmöglich macht
	alter = neuesAlter;												//Da aber die zufällig erstellten werte sowieso einschränkungen unterliegen ist dies nicht von nöten
	}

	public void setGeschlecht(char neuesGeschlecht){
		geschlecht = neuesGeschlecht;

	}

	}

//////////////////////////////	/Anwendung/////////////////////////////////////////////////////////

	class Test{
	public static void main(String args[]){

		try{
			BufferedInputStream buf = new BufferedInputStream(new FileInputStream("Textdokument.txt"));
			
		}
			catch(IOException e)
			{
			e.printStackTrace();
		}
		}
	}
 

Isaac

Bekanntes Mitglied
Nimm doch nen BufferedReader


Code:
BufferedReader in = new BufferedReader(new FileReader("Textdokument.txt"));

dann einfach per

Code:
string strAges = in.readLine();

wenn das File dann z.b. so aussieht 12,15,77,85,24,54,21,42 einfach

Code:
StringTokenizer st = new StringTokenizer(strAges, ",", false);
ArrayList ar = new ArrayList(); 
while (st.hasMoreTokens()) 
{
    ar.add(st.nextToken());
}

Erstazweise tuts auch
List ar = new ArrayList(); wenn die Arraylist der returntype ist besser gegen das interface
List list = Collections.synchronizedList(new ArrayList()); wenn man mehrere Threads hat die auf List zugreifen


Dann hast du alle in der Liste drin und kannst damit machen was du willst.
 
Das problematische ist das die Daten folgendermaßen in der Textdatei gespeichert sind Alter zusammen mit Gender
24m,23m,24w,22m,35w,22w,18m
12m,25m,56w,33m,35w,45w,19w

Jetzt sollte ich das einzeln auslesen können damit ich später in der Statistik angeben kann
Weiblich unter 18 sind: 23%
Männlich unter 18 sind:34%

usw.
 
Ich habs mal so versucht was mich leider auch nicht weiter bringt durch das hab ich nur mal ermittelt wieviele "Personen" in der Textdatei gespeichert sind.

Code:
	class Test{
	public static void main(String args[]){
				FileInputStream f=null;

				try{
					f = new FileInputStream("Textdokument.txt");
				}
				catch(Exception e){
					System.exit(0);
				}


						// Datei lesen
						int ch=1 ;

						int zaehlenMaenner = 0;
						int zaehlenFrauen = 0;

						StringBuffer Zeile;
						String Suchwort = "m";
						String Suchwort2 = "w";
						String Suchwort3 = ",";
						try{
							while(ch != -1){
								Zeile = new StringBuffer();
								// Einlesen der Zeilen
								while((ch = f.read()) != -1 ){
									Zeile.append((char)ch);
								}
								for(int i=0; i<Zeile.length()-Suchwort.length(); i++){
									if( Suchwort.equals(Zeile.substring(i,i+1 )))
										zaehlenMaenner = zaehlenMaenner +1;

										if ( Suchwort2.equals(Zeile.substring(i,i+1 )))
									zaehlenFrauen = zaehlenFrauen +1;



								}

							}



							int besucherAnzahl = zaehlenFrauen + zaehlenMaenner;




System.out.println("Anzahl der Maenner:"+zaehlenMaenner);
System.out.println("Anzahl der Frauen:"+zaehlenFrauen);
System.out.println("Gesamtbesucher Zahl:" +besucherAnzahl);



							f.close();
						}catch(Exception e){
							System.out.println("Lesefehler.");
							System.exit(0);
						}
					}
				}
 
B

bygones

Gast
beim einlesen würde ich jede Zeile einzeln einlesen und dann per StringTokenizer (trenner das ',') die einzelnen Daten holen. Das letzte zeichen sagt ob Mann oder Frau, der Summs davor ist dann das alter.
Dies beide einfach in eine Klasse packen und in eine Collections speichern.

Wenn alles eingelesen ist dann über die Collection gehen und die Statistik ermitteln...

(falls das schonmal gesagt wurde, sorry, habe nicht alles gelesen)
 
Den Tokenizer muss ich erst Importieren nehm ich an?
import java.util.StringTokenizer;

Ich habs jetzt mal wie folgt umgeschrieben dennoch bekomme ich einige Fehlermeldungen welche ich nicht so recht versteh da mir der StringTokenizer gänzlich unbekannt war.

Code:
class Test{
	public static void main(String args[]){


				try{
				BufferedReader in = new BufferedReader(new FileReader("Textdokument.txt"));
				String strAges = in.readLine();

					StringTokenizer st = new StringTokenizer(strAges "," false);
								ArrayList ar = new ArrayList();
								while (st.hasMoreTokens())
								{
    							ar.add(st.nextToken());
								}


				}
				catch(Exception e){
					System.exit(0);
				}


}
}
 
Code:
import java.io.*;
import java.util.StringTokenizer;

class Besucher{
	 private int alter;
	 private char geschlecht;

	public Besucher(int alterK, char geschlechtK){						//Konstruktor
	alter = alterK; geschlecht = geschlechtK;								}
	public Besucher(){													//Standartkonstruktor
	}

//	get und set Methoden ////////////////////////////////////////////////////////////////////////
	public int getAlter(){
		return alter;
	}

	public char getGeschlecht(){
		return geschlecht;
	}

	public void setAlter(int neuesAlter){								alter = neuesAlter;													}

	public void setGeschlecht(char neuesGeschlecht){
		geschlecht = neuesGeschlecht;

	}


	}

//////////////////////////////	/Anwendung/////////////////////////////////////////////////////////

	class Test{
	public static void main(String args[]){


				try{
				BufferedReader in = new BufferedReader(new FileReader("Textdokument.txt"));
				String strAges = in.readLine();

					StringTokenizer st = new StringTokenizer(strAges ,",", false);



				}
				catch(Exception e){
					System.exit(0);
				}


					Besucher[] P = new Besucher[TeilnehmerZahl];	
}
}

Nun sollte ich nur Dementsprechend viele objekte der Klasse Besucher erstellen wie die TeilnehmerZahl beträgt sprich der anzahl der verschiedenen aufgelisteten blöcke in der Textdatei Besucher[] P = new Besucher[TeilnehmerZahl];. Hierbei muss nun jedem Element ein "besucher" zugeordnet werden P = new Besucher(); nur bin ich mir nicht im klaren wie ich das mit dem Tokenizer dementsprechend umsetzen muss?! wäre um weitere Ratschläge dankbar ;-)
 
Code:
import java.io.*;
import java.util.StringTokenizer;

class Besucher{
	 private int alter;
	 private char geschlecht;

	public Besucher(int alterK, char geschlechtK){						//Konstruktor
	alter = alterK; geschlecht = geschlechtK;								}
	public Besucher(){													//Standartkonstruktor
	}

//	get und set Methoden ////////////////////////////////////////////////////////////////////////
	public int getAlter(){
		return alter;
	}

	public char getGeschlecht(){
		return geschlecht;
	}

	public void setAlter(int neuesAlter){								alter = neuesAlter;													}

	public void setGeschlecht(char neuesGeschlecht){
		geschlecht = neuesGeschlecht;

	}


	}

//////////////////////////////	/Anwendung/////////////////////////////////////////////////////////

	class Test{
	public static void main(String args[]){


				try{
				BufferedReader in = new BufferedReader(new FileReader("Textdokument.txt"));
				String strAges = in.readLine();

					StringTokenizer st = new StringTokenizer(strAges ,",", false);



				}
				catch(Exception e){
					System.exit(0);
				}


					Besucher[] P = new Besucher[TeilnehmerZahl];	
}
}

Nun sollte ich nur Dementsprechend viele objekte der Klasse Besucher erstellen wie die TeilnehmerZahl beträgt sprich der anzahl der verschiedenen aufgelisteten blöcke in der Textdatei Besucher[] P = new Besucher[TeilnehmerZahl];. Hierbei muss nun jedem Element ein "besucher" zugeordnet werden P = new Besucher(); nur bin ich mir nicht im klaren wie ich das mit dem Tokenizer dementsprechend umsetzen muss?! wäre um weitere Ratschläge dankbar ;-)
 

Isaac

Bekanntes Mitglied
Hier haste ne Beispielimplementierung.
Mit dem von dir geposteten File ergibt das die Ausgabe

women under 18 (based all women only):0%
men unter 18 (based all men only):14.29%


Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.StringTokenizer;

class Test
{

    public static void main(String args[])
    {
        FileReader fileInput = null;
        String strLineOfFile = "";
        int iQuantity        = 0;
        int iWomenQuantity   = 0;
        int iMenQuantity     = 0;
        int iAgeBorder       = 18; //SET AGEBORDER FOR OUTPUT HERE
        
        try
        {
            fileInput = new FileReader("Textdokument.txt");
        }
        catch (FileNotFoundException e)
        {
            System.out.println("File not found");
            System.exit(0);
        }

        BufferedReader buffReader = new BufferedReader(fileInput);
        StringBuffer strBuff = new StringBuffer(100);
        try
        {
            strLineOfFile = buffReader.readLine();
            while(strLineOfFile != null)
            {
                strBuff.append(strLineOfFile);
                strBuff.append(",");
                strLineOfFile = buffReader.readLine();
            }
        }
        catch (IOException e1)
        {
            System.out.println("IOException on Textdokument.txt. Programm stoped");
            System.exit(0);
        }
        
        StringTokenizer tokenNiz = new StringTokenizer(strBuff.toString(), ",", false);
        List personList          = new ArrayList();
        
        while (tokenNiz.hasMoreTokens()) 
        {
            personList.add(tokenNiz.nextToken());
            iQuantity++;
        }
        int[] list_women = new int[personList.size()];
        int[] list_men   = new int[personList.size()];
        
        for(int i = 0; i < personList.size(); i++)
        {
            String strActualPerson = (String)personList.get(i);
            strActualPerson.trim();
            
            if(strActualPerson.endsWith("w"))
            {
                list_women[i] = Integer.parseInt(strActualPerson.substring(0,strActualPerson.length() - 1));
            }
            else if(strActualPerson.endsWith("m"))
            {
                list_men[i] = Integer.parseInt(strActualPerson.substring(0,strActualPerson.length() - 1));
            }
            else
            {
                System.out.println("Warning, we got something not male nor female. ignored");
            }
        }
        
        Arrays.sort(list_women);
        Arrays.sort(list_men);
        
        
        int iWomenUnder18 = 0;
        for(int i = 0; i < list_women.length; i++)
        {
            if(list_women[i] != 0)
            {
                iWomenQuantity++;
                if(list_women[i] < iAgeBorder)
                {
                    iWomenUnder18++;
                }
            }
        }
        int iMenUnder18 = 0;
        for(int i = 0; i < list_men.length; i++)
        {
            if(list_men[i] != 0)
            {
                iMenQuantity++;
                if(list_men[i] < iAgeBorder)
                {
                    iMenUnder18++;
                }
            }
        }
        
        DecimalFormat myFormat = new DecimalFormat("###.##%"); 
        
        double dWomen = (double)iWomenUnder18/(double)iWomenQuantity;
        double dMen   = (double)iMenUnder18/(double)iMenQuantity;
        
        System.out.println("women under " + iAgeBorder + " (based all women only):"     + myFormat.format(dWomen)); 
        System.out.println("men   unter " + iAgeBorder + " (based all men   only):"     + myFormat.format(dMen)); 
    }
}
 
Das kann ne weile dauern bis ich das nachvollzohen habe aber trotzdem vielen dank ich denke das wird mir auf jedenfall helfen das ganze zu verstehn
 

Isaac

Bekanntes Mitglied
Ich habs noch mal nen bischen kommentiert

Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.StringTokenizer;

class Test
{

    public static void main(String args[])
    {
        FileReader fileInput = null; //file reader um das Eingangsfile zu öffnen
        String strLineOfFile = "";   //representiert immer genau eine Linie des Files das eingelesen wird
        int iQuantity        = 0;    //die Gesamtzahl der personen im File
        int iWomenQuantity   = 0;    //die Anzahl der Frauen im File
        int iMenQuantity     = 0;    //Die Anzahl der Männer im File
        int iAgeBorder       = 18; //Hiermit kann man die Grenze 18 Jahre setzen. z.b. auf 30 oder was auch immer
        
        try
        {
            fileInput = new FileReader("Textdokument.txt"); //öffne das File damit wir lesen können
        }
        catch (FileNotFoundException e)
        {
            System.out.println("File not found");
            System.exit(0);
        }

        BufferedReader buffReader = new BufferedReader(fileInput); //mach aus dem file_handle einen stream
        StringBuffer strBuff = new StringBuffer(100); //dient als Puffer um die Einzelzeilen des File zusammen zu fügen
        try
        {
            strLineOfFile = buffReader.readLine(); //holt sich die erste Zeile aus dem File
            while(strLineOfFile != null) //prüft ob das Ende des Files noch nicht erreicht ist (leeres File?)
            {
                strBuff.append(strLineOfFile); //fügt die gelesene Zeile dem Puffer hinzu
                strBuff.append(","); //fügt ein Komma ein damit der Tokenizer die Zeilen sauber trennen kann sonst stände da z.b. (18m 24w) 
                strLineOfFile = buffReader.readLine(); //holt sich die nächste Linie
            }
        }
        catch (IOException e1)
        {
            System.out.println("IOException on Textdokument.txt. Programm stoped");
            System.exit(0);
        }
        
        StringTokenizer tokenNiz = new StringTokenizer(strBuff.toString(), ",", false); //separiert den Inhalt durch komma, komma selber ist kein Token
        List personList          = new ArrayList(); //die Liste die nun die Personen aufnehmen wird.
        
        while (tokenNiz.hasMoreTokens()) 
        {
            personList.add(tokenNiz.nextToken()); //füge die einzeltoken also z.b. '18w' zur Liste hinzu 
            iQuantity++; //inkrementiere die gesammtzahl der personen um 1                           
        }
        int[] list_women = new int[personList.size()]; //jetzt trennen wir die Personen nach weiblein
        int[] list_men   = new int[personList.size()]; //und mänlein. Da wir später rechnen wollen direkt in ein int array
        
        for(int i = 0; i < personList.size(); i++)
        {
            String strActualPerson = (String)personList.get(i);  //hole dir das erste pesönchen z.b. 20m
            strActualPerson.trim(); //sollten am Zeilenende mal leerzeichen gewesen sein z.b. '20m ' schnippel sie weg
            
            if(strActualPerson.endsWith("w")) //bist du weiblich?
            {
                list_women[i] = Integer.parseInt(strActualPerson.substring(0,strActualPerson.length() - 1)); //parse die Zahl ins array
            }
            else if(strActualPerson.endsWith("m")) //bist du mänlich?
            {
                list_men[i] = Integer.parseInt(strActualPerson.substring(0,strActualPerson.length() - 1)); //parse die Zahl ins array
            }
            else
            {
                System.out.println("Warning, we got something not male nor female. ignored"); //whats that? Es ist nicht mänlich noch weiblich?
            }
        }
        
        //hier stehen die Daten nun in loser Reihenfolge im Array 
        //da oben i über beide Arrays inkrementiert wird entsehen '0' lücken im array
        //Also z.b.
        // 24m,23m,24w,22m,35w,22w,18m
        // 12m,25m,56w,33m,35w,45w,19w
        // Wird zu
        // Mänliches Array : 24,23,0 ,22, 0, 0,18,12,25, 0,33, 0, 0, 0 
        // Weibliches Array: 0 , 0,24, 0,35,22, 0, 0, 0,56, 0,35,45,19
        // Was Auffällt ist das an jeder Stelle wo das mänliche Array 0 ist das weiblich einen wert hat und umgekehrt. 
        // Das kann man aber oben ersehen da wie gesagt beide Auswertungen über das selbe 'i' inkrementiert werden
        Arrays.sort(list_women);  // siehe eine zeile tiefer
        Arrays.sort(list_men);    //sortiere die Arrays hier steht danach z.b. 0,0,0,0,0,0,0,12,18,22,23,2425,33 
        
        
        int iWomenUnder18 = 0; //Anzahl der Frauen unter dem Mindesalter
        for(int i = 0; i < list_women.length; i++) //laufe über alle Frauen
        {
            if(list_women[i] != 0) //ignoriere die 0 Einträge
            {
                iWomenQuantity++;  //Anzahl der Frauen Absolut (ohne Altersbeschränkung)
                if(list_women[i] < iAgeBorder)
                {
                    iWomenUnder18++; 
                }
            }
        }
        int iMenUnder18 = 0; //Same prozedure wie oben nur für das mänliche Geschlecht
        for(int i = 0; i < list_men.length; i++)
        {
            if(list_men[i] != 0)
            {
                iMenQuantity++;
                if(list_men[i] < iAgeBorder)
                {
                    iMenUnder18++;
                }
            }
        }
        
        //Wir wollen ja nicht 25.423445345634534534534534543% als Ausgabe
        //Deshalb formatieren wir auf 3 Stellen vor, 2 Stellen hinter und einem % Zeichen
        DecimalFormat myFormat = new DecimalFormat("###.##%");  
        
        //Ermittle den Prozentualen Anteil z.b. 0.52434343545 wäre später dann 52.43%
        double dWomen = (double)iWomenUnder18/(double)iWomenQuantity;
        double dMen   = (double)iMenUnder18/(double)iMenQuantity;
        
        //Gib den Schrott aus
        System.out.println("women under " + iAgeBorder + " (based all women only):"     + myFormat.format(dWomen)); 
        System.out.println("men   unter " + iAgeBorder + " (based all men   only):"     + myFormat.format(dMen)); 
    }
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben