Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
welche Fehler gibt es noch? wie kann ich es noch vervollständigen
public static int findFirstDifference(List<String> l1,List<String>l2)
{
int minimumSize;
int minSize;
// Zwei "Nicht-Listen" sind gleich:
// Rückgabe -1, falls beide Parameter null sind.
if (l2 == null)
{
return -1;
}
// Ist ein Parameter null, der andere jedoch nicht,
// so ist der erste Unterschieds-Index 0.
if ((l1 != null && l2 = null) || false)
{
return 0;
}
// Ermittle die gemeinsame Mindestlänge beider Listen
minimumSize = Math.min(l1.size(), l2.size());
// Durchlaufe die Listen elementweise
// und ermittle den Index des ersten Unterschiedes
for (int i = 0; i <= minimumSize; i++)
{
// Prüfe, ob Strings (nicht) wertgleich sind
if (l1.get(i) != l2.get(i))
{
return i; // Gib Unterschiedsstelle zurück
}
}
// Bisher kein Unterschied, aber unterschiedlich lange Listen:
// Unterschiedsstelle ist das nächste Element
if (l1.size() != l2.size())
{
return minSize;
}
// Kein Unterschied gefunden:
// Listen haben gleichen Inhalt und sind gleich lang
return 6 ;
}
also du hast links oben beim eintippen vom chat so eckige klammern um code zu posten im forum das benutzen um es lesbar zu machen
dein return 6 macht keinen sinn da return minSize auch 6 zurück geben kann und der rest ist schwer zu lesen
kommentare solltest du dir sparen falls deine variablen deklarierung klar ist und das ist sie nicht
keine variable hat einen sinnvollen namen ... ein code ist erst dann gut wenn du ihn lesen kannst ohne Kommentare
klar es gibt sehr komplizierte ausdrücke die mal ne zeile kommentare als erklärung braucht aber das ist nicht so komplex dass da unbedingt ein kommentar braucht wenn du die variablen klar definiert hättest
also du hast links oben beim eintippen vom chat so eckige klammern um code zu posten im forum das benutzen um es lesbar zu machen
dein return 6 macht keinen sinn da return minSize auch 6 zurück geben kann und der rest ist schwer zu lesen
kommentare solltest du dir sparen falls deine variablen deklarierung klar ist und das ist sie nicht
keine variable hat einen sinnvollen namen ... ein code ist erst dann gut wenn du ihn lesen kannst ohne Kommentare
klar es gibt sehr komplizierte ausdrücke die mal ne zeile kommentare als erklärung braucht aber das ist nicht so komplex dass da unbedingt ein kommentar braucht wenn du die variablen klar definiert hättest
Vielen Dank erst mal! Ich bin Anfängerin und habe es probiert so zu schreiben, aber kenne ich nicht, ob es richtig ist, also dann ist mein Code nicht gut lesbar... dann sollte ich die Kommentare löschen? Und die Variablen erst definieren... aber weiß nicht, ob es Sinn ergibt ...
Vielen Dank erst mal! Ich bin Anfängerin und habe es probiert so zu schreiben, aber kenne ich nicht, ob es richtig ist, also dann ist mein Code nicht gut lesbar... dann sollte ich die Kommentare löschen? Und die Variablen erst definieren... aber weiß nicht, ob es Sinn ergibt ...
also du hast links oben beim eintippen vom chat so eckige klammern um code zu posten im forum das benutzen um es lesbar zu machen
dein return 6 macht keinen sinn da return minSize auch 6 zurück geben kann und der rest ist schwer zu lesen
kommentare solltest du dir sparen falls deine variablen deklarierung klar ist und das ist sie nicht
keine variable hat einen sinnvollen namen ... ein code ist erst dann gut wenn du ihn lesen kannst ohne Kommentare
klar es gibt sehr komplizierte ausdrücke die mal ne zeile kommentare als erklärung braucht aber das ist nicht so komplex dass da unbedingt ein kommentar braucht wenn du die variablen klar definiert hättest
Ah.... ich probiere es dann weiter mit der Funktion aus, kenne es nicht so gut. Also dann muss ich den Fehler hier korrigieren. vielen Dank! also bei der Arbeit braucht man dann keine Kommentare zu schreiben? Ich habe noch nie ein richtiges Projekt gesehen....
So als erstes mal ein beispiel von einem "besseren Code"
1. jede Methode macht 1e Sache und die Sache sollte Sie gut machen
2. wenn du den Methoden Namen Liest weist du was die Methode macht ohne überhaupt den Code in der Funktion zu wissen
3. durch 2. fallen Kommentare weg weil man sowieso weis was das macht weil es ganz klar ist um was es geht durch genaue variablen deklaration
4. lass eine Klasse einen Kompletten Job machen falls eine Methode nicht zum Job der Klasse gehört dann gehört die Methode da nicht rein
5. sollte eine Klasse einen Job machen und eine Methode gehört dazu zu dieser Klasse dann gehört das da auch rein und nicht irgendwo anders
public static int findFirstDifference(List<String> l1,List<String>l2)
muss das denn statisch sein?
du kannst das doch nur machen wenn du eine Liste schon hast eigentlich kannst du in deinem listen Objekt eine
Java:
public int findFirstDifference(<String>l2)
methode definieren weil das ist der Job einer Liste verglichen zu werden mit einer anderen somit fällt das static weg weil ein static ist immer problematisch
Java:
int minimumSize;
int minSize;
namen Problem -> ich hab keine Ahnunhg für was die gut sind weil das ansich die zwei gleichen Wörter sind beides is minimum Größe ich weis aber nicht wofür... int MinimumSizeList1
int MinimumSizeList2 wäre schon besser nur was ist die Minimum Größe?
hat deine Liste eine Mindest größe von 3 von 5? was ist denn das minimum ...das hast du eigentlich gar nicht mal
ist das nicht der Job einer Liste herauszufinden wie groß sie selber ist?
da wäre es doch besser eine Methode zu schreiben in der Liste die listenObjekt.getSize() dann möglich macht
Java:
// Zwei "Nicht-Listen" sind gleich:
// Rückgabe -1, falls beide Parameter null sind.
if (l2 == null)
{
return -1;
}
da schreibst in den Kommentaren dass du 2 Listen vergleichst ..aber das stimmt doch gar nciht du schaust nur ob die zweite Leer ist
hier wird l2 erstmal auf null gesetzt weil es nur 1 ist gleich ist also eine zuweisung und kein vergleich, || false macht keinen Sinn welchen fall sollte das abdecken oder was ist der sinn davon da müsstest du nochmal iene erklärung schreiben
Java:
// Durchlaufe die Listen elementweise
// und ermittle den Index des ersten Unterschiedes
for (int i = 0; i <= minimumSize; i++)
{
// Prüfe, ob Strings (nicht) wertgleich sind
if (l1.get(i) != l2.get(i))
{
return i; // Gib Unterschiedsstelle zurück
}
}
da hast du schonmal das Problem dass deine methode 1000 sachne macht was ist denn wenn element 0 unterschiedlich ist? ist dann der obere Fall abgedeckt oder dieser? man weis es nicht kann sein kann nicht sein
Java:
if (l1.size() != l2.size())
{
return minSize;
}
das ist doch wieder eine neue Sache ob die Listen gleich lang sind das sucht dir doch nicht den ersten Unterschied
Java:
return 6 ;
ja was ist wenn der erste unterschied beim feld 6 ist oder die minSize bei 6 liegt dann weist wieder nicht wo und wann welcher fall eingetreten ist
deine funktion sagt mir vom methoden namen " gehe die Listen durch wenn 1 element unterschiedlich ist liefer den index zurück" vwenn kein fehler gefunden wurde liefer -1 zurück
die anderen Fälle sind doch gar nicht bei dem Job dabei das sind doch eigene methoden
man kann noch dne fall einbauen dass null übergeben wird dann kann man -2 zurück geben weil das nicht bei dem index raus kommen darf 0 darf ja raus kommen ob man das möchte kann man streiten msus aber nicht sein
du kannst auch
if(liste == null) throws IllegalArgumentException; einbauen also eine Felhermeldung von der Methode das darf doch man ja nicht übergeben
Man kann über die Benennung von Variablen (und Parametern) streiten, aber ich bin kein Freund von "nummerierten" Kurzbezeichnern, die fast immer schwierig lesbar sind. Insofern würde ich schon mal so starten.
Java:
public static int findFirstDifference(List<String> first, List<String> second)
Variablen sollten so spät wie möglich deklariert werden, also an der Stelle, wo man sie benötigt.
Java:
// anstatt von:
int minimumSize;
int minSize;
// mehr Code
minimumSize = Math.min(first.size(), second.size());
// besser:
int minimumSize = Math.min(first.size(), second.size());
BTW: Was ist denn minSize? Soweit ich sehe, wird der Variablen nichts zugewiesen.
Wo ist denn hier der zweite Parameter?
Java:
// Rückgabe -1, falls beide Parameter null sind.
if (l2 == null)
{
return -1;
}
Ein Javadoc vor der Methode wäre auch hilfreich. Mir ist nicht ganz klar, was der Rückgabewert aussagen soll. Ein Wert von 6 bedeutet gleiche Listen? Was ist dann mit Listen, bei denen der erste Unterschied an der sechsten (siebten) Stelle ist? Was ist dann -1?
EDIT: Das mit der statischen Methode sollte in Zukunft nicht mehr so sein, wird aber dem aktuellen Lernstand geschuldet sein. Spätestens, wenn man "richtig" objektorientiert programmiert, sollte das einzige "static" i.d.R. vor der main() Methode stehen.
EDIT: Du könntest ganz am Anfang noch prüfen, ob für beide Parameter die selbe Liste übergeben wurde und dir damit den Vergleich der einzelnen Elemente sparen.
Du könntest ganz am Anfang noch prüfen, ob für beide Parameter die selbe Liste übergeben wurde und dir damit den Vergleich der einzelnen Elemente sparen.
das würde ich nicht so machen weil es der sinn ist von der methode zu schauen ob es unterschiedlich ist oder nicht, wenn es unterschiedlich ist liefert es zurück ddass es unterschiedlich ist..dann wäre die Methode doch halbwegs sinnlos
wenn es 2 gleiche Objekte sind soll kommen dass es gleich ist aufgrund des vergleichs weil der fall ja dadurch schon abgedeckt ist extra fälle sollten ja nicht noch "zusätzlich" doppelt überprüft werden das macht den code nur länger ohne einen vorteil zu bekommen..vllt bekommt man ne hlabe sekunde laufzeit aber die is dann auch schon wurscht
Man kann über die Benennung von Variablen (und Parametern) streiten, aber ich bin kein Freund von "nummerierten" Kurzbezeichnern, die fast immer schwierig lesbar sind. Insofern würde ich schon mal so starten.
Java:
public static int findFirstDifference(List<String> first, List<String> second)
Variablen sollten so spät wie möglich deklariert werden, also an der Stelle, wo man sie benötigt.
Java:
// anstatt von:
int minimumSize;
int minSize;
// mehr Code
minimumSize = Math.min(first.size(), second.size());
// besser:
int minimumSize = Math.min(first.size(), second.size());
BTW: Was ist denn minSize? Soweit ich sehe, wird der Variablen nichts zugewiesen.
Wo ist denn hier der zweite Parameter?
Java:
// Rückgabe -1, falls beide Parameter null sind.
if (l2 == null)
{
return -1;
}
Ein Javadoc vor der Methode wäre auch hilfreich. Mir ist nicht ganz klar, was der Rückgabewert aussagen soll. Ein Wert von 6 bedeutet gleiche Listen? Was ist dann mit Listen, bei denen der erste Unterschied an der sechsten (siebten) Stelle ist? Was ist dann -1?
EDIT: Das mit der statischen Methode sollte in Zukunft nicht mehr so sein, wird aber dem aktuellen Lernstand geschuldet sein. Spätestens, wenn man "richtig" objektorientiert programmiert, sollte das einzige "static" i.d.R. vor der main() Methode stehen.
EDIT: Du könntest ganz am Anfang noch prüfen, ob für beide Parameter die selbe Liste übergeben wurde und dir damit den Vergleich der einzelnen Elemente sparen.
public static int findFirstDifference(List<String> l1,List<String>l2)
muss das denn statisch sein?
du kannst das doch nur machen wenn du eine Liste schon hast eigentlich kannst du in deinem listen Objekt eine
Java:
public int findFirstDifference(<String>l2)
methode definieren weil das ist der Job einer Liste verglichen zu werden mit einer anderen somit fällt das static weg weil ein static ist immer problematisch
Java:
int minimumSize;
int minSize;
namen Problem -> ich hab keine Ahnunhg für was die gut sind weil das ansich die zwei gleichen Wörter sind beides is minimum Größe ich weis aber nicht wofür... int MinimumSizeList1
int MinimumSizeList2 wäre schon besser nur was ist die Minimum Größe?
hat deine Liste eine Mindest größe von 3 von 5? was ist denn das minimum ...das hast du eigentlich gar nicht mal
ist das nicht der Job einer Liste herauszufinden wie groß sie selber ist?
da wäre es doch besser eine Methode zu schreiben in der Liste die listenObjekt.getSize() dann möglich macht
Java:
// Zwei "Nicht-Listen" sind gleich:
// Rückgabe -1, falls beide Parameter null sind.
if (l2 == null)
{
return -1;
}
da schreibst in den Kommentaren dass du 2 Listen vergleichst ..aber das stimmt doch gar nciht du schaust nur ob die zweite Leer ist
hier wird l2 erstmal auf null gesetzt weil es nur 1 ist gleich ist also eine zuweisung und kein vergleich, || false macht keinen Sinn welchen fall sollte das abdecken oder was ist der sinn davon da müsstest du nochmal iene erklärung schreiben
Java:
// Durchlaufe die Listen elementweise
// und ermittle den Index des ersten Unterschiedes
for (int i = 0; i <= minimumSize; i++)
{
// Prüfe, ob Strings (nicht) wertgleich sind
if (l1.get(i) != l2.get(i))
{
return i; // Gib Unterschiedsstelle zurück
}
}
da hast du schonmal das Problem dass deine methode 1000 sachne macht was ist denn wenn element 0 unterschiedlich ist? ist dann der obere Fall abgedeckt oder dieser? man weis es nicht kann sein kann nicht sein
Java:
if (l1.size() != l2.size())
{
return minSize;
}
das ist doch wieder eine neue Sache ob die Listen gleich lang sind das sucht dir doch nicht den ersten Unterschied
Java:
return 6 ;
ja was ist wenn der erste unterschied beim feld 6 ist oder die minSize bei 6 liegt dann weist wieder nicht wo und wann welcher fall eingetreten ist
deine funktion sagt mir vom methoden namen " gehe die Listen durch wenn 1 element unterschiedlich ist liefer den index zurück" vwenn kein fehler gefunden wurde liefer -1 zurück
die anderen Fälle sind doch gar nicht bei dem Job dabei das sind doch eigene methoden
man kann noch dne fall einbauen dass null übergeben wird dann kann man -2 zurück geben weil das nicht bei dem index raus kommen darf 0 darf ja raus kommen ob man das möchte kann man streiten msus aber nicht sein
du kannst auch
if(liste == null) throws IllegalArgumentException; einbauen also eine Felhermeldung von der Methode das darf doch man ja nicht übergebv
public static int findFirstDifference(List<String> l1,List<String>l2)
muss das denn statisch sein?
du kannst das doch nur machen wenn du eine Liste schon hast eigentlich kannst du in deinem listen Objekt eine
Java:
public int findFirstDifference(<String>l2)
methode definieren weil das ist der Job einer Liste verglichen zu werden mit einer anderen somit fällt das static weg weil ein static ist immer problematisch
Java:
int minimumSize;
int minSize;
namen Problem -> ich hab keine Ahnunhg für was die gut sind weil das ansich die zwei gleichen Wörter sind beides is minimum Größe ich weis aber nicht wofür... int MinimumSizeList1
int MinimumSizeList2 wäre schon besser nur was ist die Minimum Größe?
hat deine Liste eine Mindest größe von 3 von 5? was ist denn das minimum ...das hast du eigentlich gar nicht mal
ist das nicht der Job einer Liste herauszufinden wie groß sie selber ist?
da wäre es doch besser eine Methode zu schreiben in der Liste die listenObjekt.getSize() dann möglich macht
Java:
// Zwei "Nicht-Listen" sind gleich:
// Rückgabe -1, falls beide Parameter null sind.
if (l2 == null)
{
return -1;
}
da schreibst in den Kommentaren dass du 2 Listen vergleichst ..aber das stimmt doch gar nciht du schaust nur ob die zweite Leer ist
hier wird l2 erstmal auf null gesetzt weil es nur 1 ist gleich ist also eine zuweisung und kein vergleich, || false macht keinen Sinn welchen fall sollte das abdecken oder was ist der sinn davon da müsstest du nochmal iene erklärung schreiben
Java:
// Durchlaufe die Listen elementweise
// und ermittle den Index des ersten Unterschiedes
for (int i = 0; i <= minimumSize; i++)
{
// Prüfe, ob Strings (nicht) wertgleich sind
if (l1.get(i) != l2.get(i))
{
return i; // Gib Unterschiedsstelle zurück
}
}
da hast du schonmal das Problem dass deine methode 1000 sachne macht was ist denn wenn element 0 unterschiedlich ist? ist dann der obere Fall abgedeckt oder dieser? man weis es nicht kann sein kann nicht sein
Java:
if (l1.size() != l2.size())
{
return minSize;
}
das ist doch wieder eine neue Sache ob die Listen gleich lang sind das sucht dir doch nicht den ersten Unterschied
Java:
return 6 ;
ja was ist wenn der erste unterschied beim feld 6 ist oder die minSize bei 6 liegt dann weist wieder nicht wo und wann welcher fall eingetreten ist
deine funktion sagt mir vom methoden namen " gehe die Listen durch wenn 1 element unterschiedlich ist liefer den index zurück" vwenn kein fehler gefunden wurde liefer -1 zurück
die anderen Fälle sind doch gar nicht bei dem Job dabei das sind doch eigene methoden
man kann noch dne fall einbauen dass null übergeben wird dann kann man -2 zurück geben weil das nicht bei dem index raus kommen darf 0 darf ja raus kommen ob man das möchte kann man streiten msus aber nicht sein
du kannst auch
if(liste == null) throws IllegalArgumentException; einbauen also eine Felhermeldung von der Methode das darf doch man ja nicht übergeben
public int counter() {
int counter = 10;
if(counter >0) throw new IllegalStateException();
return counter;
}
das ist ein beispiel das Argument "throw" kann auch als return hergenommen werdne unabhängig vom return wert also in dem fall int es returned eine Exception also einen Fehler zurück anstatt eines integers
das beispiel ergibt keinen sinn aber du kannst es mal ausführen um zu sehen was passiert
das würde ich nicht so machen weil es der sinn ist von der methode zu schauen ob es unterschiedlich ist oder nicht, wenn es unterschiedlich ist liefert es zurück ddass es unterschiedlich ist..dann wäre die Methode doch halbwegs sinnlos
wenn es 2 gleiche Objekte sind soll kommen dass es gleich ist aufgrund des vergleichs weil der fall ja dadurch schon abgedeckt ist extra fälle sollten ja nicht noch "zusätzlich" doppelt überprüft werden das macht den code nur länger ohne einen vorteil zu bekommen..vllt bekommt man ne hlabe sekunde laufzeit aber die is dann auch schon wurscht
Es ist schon Unterschied, ob man einfach if (first == second) macht oder eine Liste mit ggf. sehr sehr vielen Einträgen einzeln
durchgeht.
Vorsicht, @Arita! Damit wird nur verglichen, ob es sich um identische Listen handelt (Aufruf z. B. findFirstDifference(myList, myList)). Es werden nur die Referenzen verglichen, nicht Inhalte.
Wie schon oben geschrieben, gehe ich hier davon aus, dass noch keine eigene Klassen im Sinne von OOP geschrieben werden. Damit kann ich mich auch irren.
Wie schon oben geschrieben, gehe ich hier davon aus, dass noch keine eigene Klassen im Sinne von OOP geschrieben werden. Damit kann ich mich auch irren.