ArrayListen und Generics

kurtisblow

Mitglied
Hallo,
ich habe ein Interface zur Verfügung und soll es nun implementieren.
Dies habe ich bisher folgendermassen getan:


Java:
package u7a1;

import java.util.ArrayList;

public class IFilterImplement implements IFilter {
	public final int maxNumberofPoints = 80;
	public final double criteria = 50;
	
	// testatpoints: criteria/100*maxNumberofPoints
	/**
	 * Filter all students that achieved enough points for the "Testat".
	 * 
	 * @param groups a ArrayList of groups, where a group is a ArrayList of students
	 * @return the ArrayList of all students who achieved enough points for the "Testat".
	 */
	public ArrayList filterRaw(ArrayList groups)
	{
		ArrayList list = new ArrayList();
		list.add();
		return list;
	}

	/**
	 * Filter all students that achieved enough points for the "Testat".
	 * 
	 * @param groups a ArrayList of groups, where a group is a ArrayList of students
	 * @return the ArrayList of all students who achieved enough points for the "Testat".
	 */
	public ArrayList<Student> filterGeneric(ArrayList<ArrayList<Student>> groups)
	{
		ArrayList<ArrayList<Student>> list = new ArrayList<ArrayList<Student>>();
		list.add(new ArrayList<ArrayList<Student>>(1));
		return list;
	}
}

Meine Frage:
Bei filterRaw bekomme ich ja eine ArrayList übergeben.
Jetzt wollte ich der neuen ArrayList list aus jeder Gruppe die Studenten hinzufügen,
die genug Testatpunkte haben, also mindestens 50.
Jetzt möchte ich das ganze in einer For-Schleife machen um bei jedem Student zu überprüfen
ob er nach der obigen Formel genug Testatpunkte hat und dann der list hinzufügen.
Wie genau muss diese For Schleife aussehen, ich weiss ja nicht wie gross groups ist?
Habe bisher folgendes:
Java:
	public ArrayList filterRaw(ArrayList groups)
	{
		ArrayList list = new ArrayList();
		for (int i = 0; i<groups.size();i++)
		{
			for (int j = 0; j < groups. )
			list.add(new ArrayList(i));
		}
		return list;
	}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
dann ist es ja erledigt, groups.size() löst es?

für die innere Schleife musst du wohl groups.get(i) herausholen und dessen size() berücksichtigen
 

kurtisblow

Mitglied
Naja,
wie genau kann ich aber einen Student aus einer Gruppe des groups array nehemen?
Dann könnte ich es schon lösen.
Ich gehe ja jede Gruppe durch und füge der Liste alle Studenten zu, für die gilt:
criteria < 50
 
Zuletzt bearbeitet:
S

SlaterB

Gast
mit get() erhält man die Objekte aus der Liste

schon bekannte Info? dann hättest du besser gleich noch deutlicher geschrieben,
haderst du im Moment mit der 2D-Verschachtelung oder den Cast auf die richtige Klasse oder oder?
 

kurtisblow

Mitglied
Also wenn ich jetzt
3 Studenten in der ersten Gruppe und 2 in der zweiten Gruppe habe.
mit welchem Befehl greife ich auf den ersten Studenten der zweiten Gruppe zu?
mit groups.get(2) greife ich doch auf die zweite Gruppe zu?
Greiffe ich dann mit (groups.get(2)).get(1) auf den ersten studenten der zweiten Gruppe zu?
 
S

SlaterB

Gast
abgesehen davon dass die Indexe bei 0 zu zählen beginnen
kannst du das doch ausprobieren und erst bei konkreten Problemen hier fragen?
und dann auch schon mit Fehlermeldungen oder sonstigen Informationen 'es scheint eher das dritte Element zu sein?' glänzen
 

rokko123

Mitglied
Mh habe grad die selbe Aufgabe und ich glaube du hast da das vorgegeben Interface verändert...

Hättest lediglich bei eclipse rechtsklick machen brauchen >> new >> class >> name: Filter >> add >> IFilter, dann erstellt dir eclipse deine klasse schön sauber und da kannst du dann die beiden Methoden filterRaw und filterGeneric reintipseln.

Java:
package u7a1;

import java.util.ArrayList;

public class Filter implements IFilter {

	@Override
	public ArrayList filterRaw(ArrayList groups) {}

     @Override
	public ArrayList<Student> filterGeneric(ArrayList<ArrayList<Student>> groups) {}

Nur als Hinweis, kriegste sonst wahrscheinlich Punktabzug...

und halt je 2 for-Schleifen, bei der zweiten criteria prüfen und dann hast dus auch schon
 
Zuletzt bearbeitet:

kurtisblow

Mitglied
Ok, danke

komme aber leider mit den for-Schleifen nicht klar.
habe bis jetzt folgendes:

Java:
public class Filter implements IFilter {

	public final int maxNumberofPoints = 80;
	public final double criteria = 50;
	@Override
	public ArrayList filterRaw(ArrayList groups) 
	{
		ArrayList list = new ArrayList();
		for (int i = 0; i<(int)groups.size();i++)
		{
			for (int j = 0; j<groups.get(i);j++)
			{
				if((int)groups.get(j)>50)
				{
					list.add(new ArrayList(j));
				}
			}
		}
		return list;
	}

	@Override
	public ArrayList<Student> filterGeneric(ArrayList<ArrayList<Student>> groups) 
	{
		ArrayList<ArrayList<Student>> list = new ArrayList<ArrayList<Student>>();
		for (int i = 0; i<groups.size();i++)
		{
			for (int j = 0; j<groups.get(i);j++)
			{
				if(groups.get(j)>50)
				{
					list.add(new ArrayList<ArrayList<Student>>(j));
				}
			}
			for (ArrayList<ArrayList<Student>> t : groups)
				t.cancel();
		}
		return list;
	}

}
 

rokko123

Mitglied
mach dir mal ne hilfsfunktion die das Testatkriterium prüft:

Java:
if (criteria(student)) {
list.add(student);
}



public boolean criteria(Student student) {
		   .....
		}
 

kurtisblow

Mitglied
Ok, danke,das mit den Testatpunkten habe ich hinbekommen,

Java:
	public boolean criteria (Student student)
	{
		double points = (((double)student.getPoints())/maxNumberofPoints)*100;
		if (points > criteria)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

wie kann ich aber auf die einzelnen studenten einer Gruppe der Gruppen zugreiffen? Dies ist mir
immer noch ein Rätsel.
 

kurtisblow

Mitglied
Java:
public class Filter implements IFilter {

	public final int maxNumberofPoints = 80;
	public final double criteria = 50;
	
	public boolean criteria (Student student)
	{
		double points = (((double)student.getPoints())/maxNumberofPoints)*100;
		if (points > criteria)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	
	public ArrayList filterRaw(ArrayList groups) 
	{
		
		ArrayList list = new ArrayList();
		for (int i = 0; i<groups.size();i++)
		{
			for (int j = 0;  (groups.get(i)).size > j;j++)
			{
				Student student = (Student) groups.get(i);
				if(criteria(student))
				{
					list.add(student);
				}
			}
		}
		return list;
	}


	
	public ArrayList<Student> filterGeneric(ArrayList<ArrayList<Student>> groups) 
	{
		ArrayList<ArrayList<Student>> list = new ArrayList<ArrayList<Student>>();
		for (int i = 0; i<groups.size();i++)
		{
			for (int j = 0; (groups.get(i)).size() > j;j++)
			{
				ArrayList<Student> student = groups.get(i);
				if(criteria(student))
				{
					list.add(student);
				}
			}
		}
		return list;
	}

}

Habe jetzt mal das hier, funktioniert noch nicht, leider
 

rokko123

Mitglied
deine Testatbedinung is nicht ganz richtig..

Java:
return student.getPoints() >= (criteria/100*maxNumberOfPoints)
wärs eigentlich, damit kannst du dir dann auch das if-else-zeuchs sparen in dieser Methode


in der ersten for-schleife fehlt noch je sowas
Java:
ArrayList xy = (ArrayList) groups.get(i);


bei
Java:
(groups.get(i)).size()
kannst auch einfach
Java:
for (j = 0; j < groups.size(); j++) {
schreiben, weiss ned ob das andere funktioniert, sieht aber bisschen komisch aus, habs nit getestet

gl
 

Neue Themen


Oben