# Liste von Personen



## wohl1307 (7. Jan 2012)

Tag zusammen 

und zwar ich sitze hier bei meiner HÜ wo es darum geht eine Liste zu erstellen (dürfen keine vorgefertigten nehmen). Und zwar zuerst muss man einfügen und dann immer jedes 10. element löschen



> Entwickeln Sie ein Java-
> Programm das eine Liste von 41 Personen aufbaut, dann reihum jeweils die 10. Person aus der Liste
> entfernt, und schließlich die Positionen der beiden übrigbleibenden Personen ausgibt.




```
wobei mir aba hauptsächlich probleme macht, dass es dann umgedreht ist. also eingefügt wird zuerst 41 aba anfangen soll es mit Löschung von 10 und nicht Person 31
 
public class EliminateTenth_Frame {

	static Person head;
	static final int NUMPERSONS = 41; // Josephus plus 40 soldiers
	static final int STEPWIDTH  = 10; // Elimination of each 10th
	
	public EliminateTenth_Frame() {
		head = null;
	}
	
	static void assembleRing(int n) {
		Person temp=head;
		for(int i=NUMPERSONS;i> 0;i--) {
			if(head == null) {
				head = new Person(i);
				head.prev = null;
			}
			else {
				Person actual = head;
				while(actual.next != null) {
					temp = actual;
					actual = actual.next;
				}
				actual.next = new Person(i);
				actual.prev = temp;
				System.out.print("Prev:"+actual.prev+"Next:"+actual.next);
			}
			
			System.out.println("Person no. " + i + " inserted.");
		}
		Person person = head;
		for(int i = 0;i< NUMPERSONS;i++) {
			
			System.out.println(person);
			person =person.next;
		}
	  } // assembleRing


	  static void elimination(int step) {
		  Person actual = head;
		  int i = 0;
		  int count = NUMPERSONS;
		  while(actual.next != null) {
			  actual = actual.next;
		  }
		  System.out.println(actual);
		  System.out.println(actual.prev);
		  while(count >= 10) {
			  for(int j=1;j<step;j++) {
				  actual = actual.prev;
				  i++;
				  if(i>count)
					  actual = head;
			  }
			  System.out.println(actual.next+"eliminated");
			  actual.next = actual.next.next;
		  }
		  
		  System.out.println("Survived have persons no. " );
	  } // elimination

	  public static void main(String args[])
	  { System.out.println("Elimination of each 10th (n=41)");
	      
	    System.out.println("Assemble ring structure...");
	    assembleRing(NUMPERSONS);
	    
	    System.out.println("Assembling completed...");
	    elimination(STEPWIDTH);
	  } 
	} // End of class EliminateTenth
```

Person.java


```
package ws2011.ue8;

public class Person {
	String name;
	Person next;
	Person prev;
	int age;
	public Person(int number ){
		this.name = "Person"+number;
	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String toString() {
		return name;
	}
}
```
Bin schon gespannt was mein Anfänger fehler war, aba ich schätz mal mein Problem ist schon beim erstellen der Liste 

Danke für Unterstützung


----------



## chalkbag (8. Jan 2012)

Hallo,

wenn ich deinen Code unverändert ausführe, bekomme ich eine Nullpointer-Exception. Dies liegt darin das du Person 1 bei Prev nicht auf Person 41 zeigt. Auch ist mir nicht ganz klar warum du die Liste auf dem Kopf einfügst (also bei 41 anfängst). Beim eliminieren rennst du dann umständlich nochmal durch die Liste nur um zu Person 1 zu kommen.
Auch wäre es sicherlich besser eine Klasse für die Liste zu machen und auf public Instanzvariablen zu verzichten.

Aber zu Beginn vielleicht aus


```
for(int i=NUMPERSONS;i> 0;i--) {
```


```
for(int i=1;i<= NUMPERSONS ;i++) {
```

machen.


----------



## wayfinder (9. Jan 2012)

mhh ... gehst du softwareentwicklung 1 an der jku? da bin ich auch. kenn mich mit listen auch nich sorecht aus...


----------

