Wie soll ich das denn jetzt Handeln?
Hallo. Ich hoffe die Programmiererschaft ist aus ihrem kleinem Schläfchen erwacht und kann mir hier etwas weiterhelfen. Ich mache (immernoch) eine Coding-Challenge. Dachte sie ist Lustig, langsam wird sie Sinnlos .__.
Erstmal die zurzeitige Stage:
An sich wurde alles gesagt. Das Problem mit den max. 10 Packages hab ich bereits gelöst. Nun bin ich aber bei der byte abfrage ... Die ist dann schon Lustiger. Hier mal meine add Funktion.
void add(Package package) {
// Check if package already in map.
std::list < std::string > info_list({
package.name,
std::to_string(package.versionMajor),
std::to_string(package.versionMinor)
});
if (saved_packages.count(info_list)) {
return;
}
uint32_t used_size = 0;
for (it_helper = saved_packages.begin(); it_helper != saved_packages.end(); it_helper++) {
used_size += it_helper -> second.size;
}
// INFO: saved_packages.size() starts (idk why) by 2. So 12 means 10 packages.
if (saved_packages.size() >= 12 && used_size >= 100) {
throw std::exception();
}
saved_packages.insert(std::pair < std::list < std::string > , Package > (info_list, package));
}
Simpel ... Naja. Also das && falsch ist, dass weiß ich. Wollte es nur damit mal ausprobieren. Also bei "&&" kommt folgendes raus:
"The add method threw no exception despite exceeding the limit of 10 packages." und es macht Sinn. Schließlich war das Maximum erreicht, die bytes aber noch frei. Dennoch sollte man es ja nicht zulassen. Wenn ich jetzt aber || mache:
"The add method threw an exception before reaching the limit of 100 bytes." was auch Sinn macht. Denn die 10 Packete wurden vermutlich gesendet, bevor die 100 Bytes erreicht waren. Nun ... Was jetzt? Ich hab tatsächlich keine einzige Idee gerade, währe dankbar für bisschen Hilfe. Danke im Vorraus und lg.
EDIT:
Alsooo ... Ich hab rein theoretisch ausversehen die saved_packages map nicht in der Klasse sondern komplett global gespeichert. Das heißt, wenn 2 Instanzen meiner Klasse da waren (Was hier der Fall war), dann war das Package Limit bei Instanz 1 erreicht, bei 2 aber nicht. Das gab halt einen Error, dadurch hat es dann nicht geklappt. Manchmal sind es wirklich die einfachsten Dinge ... Danach hat es btw. auch direkt mit 0 Angefangen zu zählen.
2 Antworten
Meiner Meinung nach müsste es heißen:
if (saved_packages.size() > 10 || used_size >= 100) {
throw std::exception();
}
Die erste Fehlermeldung besagt, dass Du mehr als 10 Packages akzeptiert hat, obwohl Du die Anzahl auf 10 begrenzen solltest.
Was dann aber
The add method threw an exception before reaching the limit of 100 bytes.
soll, ist mir auch unklar. Die Anzahl der Packages soll auf 10 begrenzt werden und zusätzlich die Anzahl der Bytes auf 100.
Hilfreich erscheint mir dieser Kommentar:
// INFO: saved_packages.size() starts (idk why) by 2. So 12 means 10 packages.
Wenn du von 2 bis 12 zählst, hast du aber elf Pakete. Es könnte also helfen, zu schreiben:
if (saved_packages.size() > 11 && used_size >= 100) {
throw std::exception();
}
(also "größer" statt "größer gleich").
Möchtest du das bitte ausprobieren?
Erstmal: Danke für die Antwort. Dabei kommt dann leider raus:
The add method threw no exception despite exceeding the limit of 10 packages.