kompliziertes Konstrukt von Schleifen/If/else. Rekursion?

Status
Nicht offen für weitere Antworten.
W

wallie

Gast
Hallo,

heute kam mein Meister mit einer ganz tollen Aufgabe zu mir...


es gibt 2 Listen:

Eine Liste mit bestehenden Materialien und eine Liste mit neuen einzupflegenden Materialien:

( listeNeu enthält wie listeBestehend bereits alle Daten mann muss nur noch den Vergleich machen etc....)

-----------------------------------

Code:
ArrayList listeBestehend = new ArrayList();

for(int k = 0 ; k < listeNeu.getRowCount() ; k++)
{
	
   listeNeuMaterialName = dm.getValueAt(k,6).toString();
      	
    	for(int l = 0 ; l < listeBestehend.size(); l++)
      	{
    		String listeBestehendMaterialName = listeBestehend.get(l).toString()l;
    		
    		int counter = 0;
    		    		
	    		if(listeBestehendMaterialtName.equals(listeNeuMaterialName))
	    		{       			
	    			System.out.println("Material bereits vorhanden!");
	    			
	    			counter++;
	    			listeNeuMaterialName +=  counter; 
 // z.B. würde das ergeben: Hammer1 , nun kann es aber sein dass das Material Hammer1 bereits in der listeBestehend vorhanden ist und zwar an einer Stelle an der ich schon vorbei bin und somit nicht mehr dort hinkomme.
	    			
	    		}  
	    		else
	    		{
	    			wenn obiger vergleich nicht zutrifft, dann kan ich hier keine neue Instanz der Klasse Material erstellen, da ich in der ArrayList "listeBestehend"  ja evtl. erst bei index 50 bin und das arraylist ist aber 100 einheiten  lang. sprich index 50-100 muss auch geprüft werden, also kommt in diesen else zweig eigentlich gar nichts richtig?  			
	    			
	    		}	
    		    		
      	} 

}
Es geht darum lt. meinem Meister, dass ein Material einen eindeutigen Materialnamen hat, fragt mich net warum, dass ist die Aufgabe!

Wer möchte sich an diesem heiklen Ding mit Tips beteiligen, würde mich freuen?

Bei Fragen fragt einfach!
 
T

tuxedo

Gast
wallie hat gesagt.:
Wer möchte sich an diesem heiklen Ding mit Tips beteiligen, würde mich freuen?
Bei Fragen fragt einfach!

1) Was erwartest du jetzt? Namen von Leute die dir Helfen wollen, oder wie?
2) Aufgabenstellung ist etwas wirr... Hab ich das richtig verstanden dass zwei Listen "gemerged" werden müssen? Wenn ja: wo liegt die Schwierigkeit? *am kopf kratz*
3) Du weißt schon, dass ein drücken der Enter/Return-Taste einen Zeilenumbruch herbeiführt *zum geposteten code rüberschiel*
 
G

Gast

Gast
Deinen Code so abändern:
Code:
ArrayList listeBestehend = new ArrayList(); 
 
for(int k = 0 ; k < listeNeu.getRowCount() ; k++) 
{
	listeNeuMaterialName = dm.getValueAt(k,6).toString(); 
	int counter = 0;

        while(inList(listeBestehend, listeNeuMaterialName))
        { 
		counter++;
		listeNeuMaterialName = dm.getValueAt(k,6).toString()dm.getValueAt(k,6).toString();
	}
	//Hier das neue Object zu listeBestehend hinzufügen
 
 }

und diese Methode zusätzlich einfügen:
Code:
public boolean inList(ArrayList listeBestehend, String listeNeuMaterialName)
{
	for(int l = 0 ; l < listeBestehend.size(); l++) 
        {
		String listeBestehendMaterialName = listeBestehend.get(l).toString();
		if(listeBestehendMaterialtName.equals(listeNeuMaterialName)) 
		{
			System.out.println("Material bereits vorhanden!"); 
			return false;
		}
	}
	return true;
}
 
B

bygones

Gast
@gast...

wenn es in der liste ist gibst du false zurueck ! denke das sollte dann eher true sein

Code:
ArrayList listeBestehend = new ArrayList();

for(int k = 0 ; k < listeNeu.getRowCount() ; k++)
{
   
   listeNeuMaterialName = dm.getValueAt(k,6).toString();
         
       for(int l = 0 ; l < listeBestehend.size(); l++)
das gibt doch schon keinen sinn.. wenn du oben erst die listeBestehend anlegst, ist diese immer leer, d.h. die 2. schleife wird nie durchlaufen

ausserdem, warum selbst ueber die Liste iterieren ? nutzt doch einfach contains() um zu ueberpruefen ob ein Element in der Liste vorkommt...
 

Ariol

Top Contributor
oh, war vorhin garnicht eingeloggt...

contains geht nicht, weil es nicht die gleichen Objekte sind, sondern es nur um den Namen geht.

aber das in der Schleife war ein fehler es muss natürlich so heißen:
Code:
public boolean inList(ArrayList listeBestehend, String listeNeuMaterialName) 
 { 
    for(int l = 0 ; l < listeBestehend.size(); l++) 
     { 
       String listeBestehendMaterialName = listeBestehend.get(l).toString(); 
       if(listeBestehendMaterialtName.equals(listeNeuMaterialName)) 
       { 
          System.out.println("Material bereits vorhanden!"); 
          return true; 
       } 
    } 
    return false; 
 }
 
B

bygones

Gast
Ariol hat gesagt.:
contains geht nicht, weil es nicht die gleichen Objekte sind, sondern es nur um den Namen geht.
das ist kein argument dagegen... contains funktioniert ueber equals... also einfach in dem entsprechenden Objekt die equals methode so anpassen.
 

Ariol

Top Contributor
also eher so:
Code:
ArrayList listeBestehend = new ArrayList(); 
 
 for(int k = 0 ; k < listeNeu.getRowCount() ; k++) 
 { 
    int counter = 0; 
 
         while(listeBestehend.contains(listeNeu.get(i)) 
         { 
                counter++;
                //Name von listeNeu.get(i) ändern
         } 
    //Hier das neue Object zu listeBestehend hinzufügen 
 
 }
 
B

bygones

Gast
oeh... kein while... ein element ist in der liste oder nicht - also ein einfaches if
Code:
ArrayList listeBestehend = new ArrayList();

for(int k = 0 ; k < listeNeu.getRowCount() ; k++) {
   listeNeuMaterial = dm.getValueAt(k,6); // objekt lassen, nicht zu String casten
   
   if(listeBestehend.contains(listeNeuMaterial)) {
      // kommt in der liste vor - also irgendwas nun machen
   }
}
 
W

wallie

Gast
deathbyaclown hat gesagt.:
das gibt doch schon keinen sinn.. wenn du oben erst die listeBestehend anlegst, ist diese immer leer, d.h. die 2. schleife wird nie durchlaufen
ausserdem, warum selbst ueber die Liste iterieren ? nutzt doch einfach contains() um zu ueberpruefen ob ein Element in der Liste vorkommt...

darum:

steht im thread oben
listeNeu enthält wie listeBestehend bereits alle Daten mann muss nur noch den Vergleich machen etc....

warum selbst über die Liste iterien: du meinst so ist es besser ?:


Code:
for(int k = 0 ; k < listeNeu.getRowCount() ; k++)
{ 

     if(listeBestehend.contains(listeNeu.get(k).toString());  
     {
          while(listeBestehend.contains(listeNeu.get(k).toString() + k.toString());
          {




          }


     }

}


Mit
Code:
 if(listeBestehend.contains(listeNeu.get(k).toString());

prüfe ich doch nur ob der name an dem index der gleiche Mat.-name ist aber doch nicht ob dieser name in der kompletten liste vorkommt. ???
 

Ariol

Top Contributor
deathbyaclown hat gesagt.:
oeh... kein while... ein element ist in der liste oder nicht - also ein einfaches if

Nicht wirklich, weil sich ja der name des Objects ändert, wenn das Object vorkommt.
Und für jeden neuen namen muss man neu überprüfen, das war ja das ursprüngliche Problem!
 
W

wallie

Gast
Ariol hat gesagt.:
deathbyaclown hat gesagt.:
oeh... kein while... ein element ist in der liste oder nicht - also ein einfaches if

Nicht wirklich, weil sich ja der name des Objects ändert, wenn das Object vorkommt.
Und für jeden neuen namen muss man neu überprüfen, das war ja das ursprüngliche Problem!

richtig immer wenn der name vorhanden ist muss der ursprungname aus listeNeu genommen werden + "1" hintendran und danch nochmals als nach dem Materialnamen + 1(zähler einer schleife) verglichen werden.
 
W

wallie

Gast
Hallo,

könnte das so funktionieren?

Code:
private ArrayList listeBestehend = new ArrayList();

 public void compareMaterialName()
    {  
      	for(int i = 0 ; i < dm.getRowCount(); i++) //800 Materialien in der Tabelle die der ArrayList mit einem 
      	{										   //eindeutigen Mat.-namen hinzugefügt werden müssen.
      	   
      		String materialNameNeu = dm.getValueAt(i,6).toString();
      		int counter = 0;
	
  	         while(listeBestehend.contains(materialNameNeu))
  	         {  	              
  	        	 counter++;
  	             materialNameNeu += counter; 
  	         }
	      	// Hier wird das neue Material der ArrayList hinzugefügt, denn nachdem die "listeBestehend" einmal
	      	// komplett iteriert wurde kann man sichergehen, dass der Name aus der Tabelle nicht in der
	      	// liste vorkommt	      	
      	}
    }

habs mal etwas geändert und eine TAbelle /GUI erstellt etc...

was haltet ihr nun von der logik in obigem algo ?
 
W

wallie

Gast
vergesst das mit dem iterieren in dem Kommentar, das ist veraltet...
 

FenchelT

Bekanntes Mitglied
wallie hat gesagt.:
Hallo,

heute kam mein Meister mit einer ganz tollen Aufgabe zu mir...


es gibt 2 Listen:

Eine Liste mit bestehenden Materialien und eine Liste mit neuen einzupflegenden Materialien:

Bei Fragen fragt einfach!

Moin zuersteinmal,

ja, ich haette da mal ne Frage.
Wo kommen die Daten fuer die Listen eigentlich her?
Aus einer DB?
Aus einer Textdatei?

Oder fuellt der Meister an seinem PC haendisch die Listen-Objekte und betraut Dich dann mit der Aufgabe diese auszuwerten?

Oder, oder, oder?!
 
W

wallie

Gast
Moin zuersteinmal,

ja, ich haette da mal ne Frage.
Wo kommen die Daten fuer die Listen eigentlich her?
Aus einer DB?
Aus einer Textdatei?

Oder fuellt der Meister an seinem PC haendisch die Listen-Objekte und betraut Dich dann mit der Aufgabe diese auszuwerten?

spielt keine rolle (keien zeit zu erklären...)

Wenn Mat.name "Hammer1" bereits existiert, dann bekomme ich "Hammer12" und nicht "Hammer2" hm...

ist ja klar, da vorheriger Name +1 = 12 und nicht 2. Nun könnte ich zwar den letzten Buchstaben bzw. die zahl eines Mat.namens auslesen und würde dann eine Zahl von 1-9 bekommen, doch was wenn "Hammer11" existiert hehe
 
T

tuxedo

Gast
Ist irgendwie blöd die Nummerierung in den Namen einzubauen. Besser wäre, wenn dein Material-Objekt dafür was eigenes hätte.

- Alex
 
W

wallie

Gast
alex0801 hat gesagt.:
Ist irgendwie blöd die Nummerierung in den Namen einzubauen. Besser wäre, wenn dein Material-Objekt dafür was eigenes hätte.

- Alex

schon klar nur ist das die Aufgabe vom Meista... und der kann grantig werden... :lol:
 

Ariol

Top Contributor
Schreib statt
Code:
materialNameNeu += counter; 
[code]

das hier
[code]
materialNameNeu = dm.getValueAt(i,6).toString() + counter;
 
W

wallie

Gast
Ariol hat gesagt.:
Schreib statt
Code:
materialNameNeu += counter; 
[code]

das hier
[code]
materialNameNeu = dm.getValueAt(i,6).toString() + counter;
super geht !
 
T

tuxedo

Gast
sicher dass das geht? Ist es denn ausgeschlossen dass dm.getValueAt(i,6).toString() nicht schon eine Nummer am Ende des String beherbergt?

Oder bin ich da jetzt aufm falschen Dampfer?
 
W

wallie

Gast
FenchelT hat gesagt.:
wallie hat gesagt.:
spielt keine rolle (keien zeit zu erklären...)

:autsch:

Dann wuensche ich Dir viel Erfolg bei der Loesung Deines Problemes.
Wenn jemand der Hilfe benoetigt nicht die Zeit hat, sein Problem richtig zu schildern ist mir meine Zeit zu schade zu helfen. :!:

Ich bin raus. Schoenes WE

es reicht wenn ichs einmal erkläre und wie man sieht gab es welche die hatten sogar taugliche Vorschläge :bae:

an den Zweifler: ja es geht!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
S Konstrukt Sinn, Zewck und Name Allgemeine Java-Themen 6
J Konstrukt um alle Paare und Tripel einer Punkte-Menge bilden Allgemeine Java-Themen 12
G java konstrukt für x und y wertepaare zu speichern ? Allgemeine Java-Themen 2
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 2
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 1
A Mehrere for-Schleifen Allgemeine Java-Themen 2
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
Junger_Basileus Attribute, Arrays, Schleifen Allgemeine Java-Themen 9
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
C Schachbrett mit while-schleifen Allgemeine Java-Themen 7
P Erste Schritte Dynamische Anzahl von verschachtelten Schleifen Allgemeine Java-Themen 5
R kann man irgendwie mit Arrays mit Eingabefenstern und Schleifen Werte abklappern? Allgemeine Java-Themen 2
R n verschachtelte Schleifen? Allgemeine Java-Themen 14
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
R Schleifen Allgemeine Java-Themen 11
L for-Schleifen Zählfehler Allgemeine Java-Themen 6
G Code nach Schleifen und Verzweigungen durchsuchen Allgemeine Java-Themen 6
S verzweigungen und schleifen Allgemeine Java-Themen 24
B BigDecimal Schleifen Allgemeine Java-Themen 9
prakdi Zeit zum Durchlauf der Schleifen unverständlich!? Allgemeine Java-Themen 3
B Auslagerung von verschachtelten Schleifen Allgemeine Java-Themen 11
T Verschachtelte Schleifen abbrechen Allgemeine Java-Themen 3
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
S Verschachtelte Schleifen Allgemeine Java-Themen 9
Z GC -> Allokation in Schleifen Allgemeine Java-Themen 25
A Fibonacci-Zahlen & kopfgesteuerte Schleifen & Strukt Allgemeine Java-Themen 8
V Vererbung und Schleifen Allgemeine Java-Themen 5
S schleifen Allgemeine Java-Themen 3
A Schleifen in Ant? Allgemeine Java-Themen 5
G Methode mit Schleifen NullPointerException Allgemeine Java-Themen 2
L Schleife über Schleifen Allgemeine Java-Themen 4
M Verschachtelte Schleifen (unbekannte Tiefe) Allgemeine Java-Themen 3
N Code verkürzen(mit schleifen)? Allgemeine Java-Themen 10
C Effektivitaet bei for Schleifen Allgemeine Java-Themen 18
C Performance von FOR Schleifen Allgemeine Java-Themen 25
R Lohnt sich byte und short bei Schleifen? Allgemeine Java-Themen 9
P Schleifen liefern Werte nicht wie erwartet Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben