ListIterator

Status
Nicht offen für weitere Antworten.

ven000m

Bekanntes Mitglied
Hallo,

ich muss eine Aufgabe machen und kenne da einen bestimmten Befehl nicht, in der Aufgabenstellung heißt es:

"In der Klasse ListTest werden Listen von Zahlen bearbeitet, die als Zeichenketten
gespeichert sind. Programmieren Sie in der Klasse ListTest eine Klassenoperation mit der Signatur static
void remove5List(List list), die in einem Durchlauf durch die Liste alle Elemente
entfernt, die „durch 5 teilbar“ sind. Beachten Sie dabei, dass die Zahlen als Zeichenketten
(Strings) gespeichert sind. Benutzen Sie zum Durchlaufen der Liste ein Objekt des Typs
ListIterator.

Erweitern Sie das Hauptprogramm um einen Aufruf von remove5List, um alle Elemente
von list2 zu entfernen, die „durch 5 teilbar“ sind.
Hinweis: Die Klasse String stellt eine Operation boolean endsWith(String suffix)
zur Verfügung."

Die Operation endsWith(String suffix) was ist damit gemeint, es wäre nett wenn mir einer diese Aufgabe zumindest ansatzweise zeigt?

Was ist genau mit suffix gemeint?
 

KSG9|sebastian

Top Contributor
Iterator:

Code:
List werte = new ArrayList();
ListIterator iter = werte.iterator();

for(iter; iter.hasNext();){
     //überprüfen ob zahl durch 5 teilbar
}

Um einen String in nen Integer/Double zu wandeln benötigst du folgende Funktionen:

int zahl = Integer.parseInt(String);
double zahl2 = Double.parseDouble(String);

Um zu überprüfen ob ne Zahl durch 5 teilbar ist benötigst du den Module-Operator: %

% = Restwertdivision

Bsp:

5 % 3 = 2
3 % 3 = 0
8 % 5 = 3

endsWith: guck in die API
 

ven000m

Bekanntes Mitglied
Code:
  		while (it.hasNext()) 
		{  			  		
      		
      		integer= Integer.parseInt((String)it.next());  
      		
    	}
    	System.out.println("\n-");


Hallo,

so ich habs geschafft, jetzt muss ich nur noch gucken, ob integer durch 5 teilbar ist , wenn ja >> löschen aus der list.
 

ven000m

Bekanntes Mitglied
Code:
static void remove5List(List list)
  	{
  		ListIterator it = list.listIterator();
  		String string;
  		int integer=0;
  		
  		while (it.hasNext()) 
		{  			  		      		
      		integer= Integer.parseInt((String)it.next());  
      		
      		if(integer>0 && (integer%5)==0)
      		{
      			it.remove();
      			System.out.print("test");
      		}
      		
      		System.out.print(integer+" ");
      		
      		
    	}
    	System.out.println("\n-");  	
  		
  	}


Ausgabe:
0 1 2 4 test5 7 8 9 test10 11 12 13 14 test15 16 17 18 19

Seht ihr, der Modulo Operator mischt sich bei test wohl ein, aber wieso verschwindet das Element nicht mit it.remove() ?
 

mic_checker

Top Contributor
Heisst die Ausgabe nicht so:

0 1 2 3 4 test5 6 7 8 9 test10 11 12 13 14 test15 16 17 18 19

?

Die Elemente werden gelöscht , nur du gibst die Elemente jeweils am Ende der while immer aus, deswegen erscheinen die entsprechenden Sachen noch in der Ausgabe.
 

ven000m

Bekanntes Mitglied
Mhm... wie müsste es denn heißen?

Das Problem ist ja ich fahre bis zum Ende durch und kann dann nichts mehr ausgeben.
 

mic_checker

Top Contributor
Kommt drauf an was du als Ausgabe erhalten willst. Was soll er denn für dein Beispiel ausgeben ? ( Kommen negative Zahlen vor ?)
 

ven000m

Bekanntes Mitglied
Code:
static void remove5List(List list)
  	{
  		ListIterator it = list.listIterator();
  		String string;
  		int integer=0;
  		
  		System.out.print("5er Divisoren raus: ");
  		
  		while (it.hasNext()) 
		{  			  		      		
      		integer= Integer.parseInt((String)it.next());  
      		
      		if(integer>0 && (integer%5)==0)
      		{
      			it.remove();
      		}     		
    	}  	
		
  		while(it.hasPrevious())
  		{
  			System.out.print((String)it.previous()+" ");
  		
  		}	
  		
  	}

Hi,

die Liste wird jetzt rückwärts ausgegeben und die 5er Teiler sind entfernt. Das dass ganze rückwärts ausgegeben wird ist jetzt nicht extra verboten, aber vorwärts fand ich schon cooler *gel. :lol:
 

mic_checker

Top Contributor
Warum machst du nicht einfach so:

Code:
            if(integer>0 && (integer%5)==0)
            {
               it.remove();
            }
            else
            	System.out.print(integer + " ");
 

ven000m

Bekanntes Mitglied
Hi,

danke super :applaus: Kombination, wie alt bist du eigentlich?

Ich 21 und wir programmieren bissel im Wirtschaftsinformatik Studium. :###
 

ven000m

Bekanntes Mitglied
Hallo,

ich möchte aus meiner Teilliste das Element 11 entfernen.

In der Liste sieht es so aus:
11,12,13,14

//Aufgabe 45
List Teilliste =list2.subList(7,13);
printList(Teilliste);

System.out.println("\n");
Teilliste.remove(11);
printList(Teilliste);

Unser Prof meint, was passiert? Ich hab immer IndexoutofBounce, muss wohl oder?
 

mic_checker

Top Contributor
Deine Liste hat nur die 4 Elemente? Dann gibt es ne Out Of Bounds ja.

Willst du das elfte Element löschen oder das Element mit dem Wert 11?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben