Aufgabe 5.3


Meine Methode liefert immer false zurück, egal was ich bei “was” eingebe. Wo liegt der Fehler?

1 public boolean aendern(String was, String neuerEintrag){
2 if (was == “sorte”){
3 sorteAendern(neuerEintrag);
4 return true;
5 }
6 else if (was == “land”){
7 landAendern(neuerEintrag);
8 return true;
9 }
10 else if (was == “roestung”){
11 roestungAendern(neuerEintrag);
12 return true;
13 }
14 else if (was == “jahr”){
15 Integer b =new Integer(neuerEintrag);
16 jahrAendern(b.intValue());
17 return true;
18 }
19 else return false;
20 }


Anstatt
was == “sorte”
nimm
was.equals(“sorte”)

Analog fürn Rest.


Danke,
jetzt funktioniert das Programm fehlerfrei,
aber ich hab trotzdem immernoch 20%.


Hast du deine Klassen alle public gemacht?
Bei mir lags daran :wink:
Hab gestern deswegen ewig mit fehlersuche verbracht.


Na, sind auch alle Methoden brav STATIC???
Ihr müsst IMMER drandenken, dass die Testcases von außen einfach in die Klassen reinlangen wollen.

Die testen hier sowas:
if(aendern(“humpel”,“”) == false)
testcase(OK);


Wenn ich mich net ganz täusche sollte

if (was == "text")

eigentlich immer langen da operator== überladen ist, ich kann aber in der API Referenz nix dazu finden …

[edit]
Doch nicht … damn Java … strange warum es bei mir mit == funktioniert.


Das Ueberladen von Operatoren ist in Java leider nicht moeglich. :frowning:
Siehe dazu operator overloading : Java Glossary


@Maddin

Hi, hatte ich auch mal zwischenzeitlich. Noch ein Tipp: Schau doch mal, ob du den Fuellstand deines Arrays auch richtig ueberpruefst. Wenn dein Programm es zulaesst 101 Elemente zu erstellen, aber dein Array ja nur 100 hat, dann bekommen die eine OutOfBounds Exception => kleiner Przentsatz. Du kannst das einfach mal testen indem du das Limit auf 3 setzt und nachschaust, ob du auch wirklich nur 3 Elemente erstellen kannst…

War bei mir der Fehler…


Danke für den Hinweis, jetzt hab ich immerhin 40%.

Public ist übrigens alles, außer die 4 private Operatoren aus der Angabe


String.operator+ ist aber überladen …
Super wenn die das speziell für String in die Klasse reingehackt haben. Wird mich lehren Java mit C++ vergleichen zu wollen, da geht wenigstens String.operator== wie erwartet.


Jetzt hab ichs auch geschaft.

Ich hab blos ein 99iger Array statt einem 100der genommen.


Ich habe folgendes Problem:
Wenn ich so
public class Kaffeeverwaltung {
static Kaffeesorte.Kaffeesorte[] kaffeesortenFeld=new Kaffeesorte.Kaffeesorte[100];
static int anzahlKaffeesorten=0;

Meine kaffesortenFald definiere, funkzioniert meine Code nicht. (Kaffeesorten.class ist schon in demselben Ordner erzeugt)
Woran kann es liegen?


Probiers mal mit:
static Kaffeesorte[] kaffeesortenFeld = new Kaffeesorte[100];


Das funktioniert auch nicht. Dann soll, glaube ich, class Kaffeesorte importiert werden, aber das funktioniert nur dann bei mir, wenn ich diese Klasse in einen separaten Ordner kopiere. Vielleicht muss CLASSPATH defieniert werden, aber ich weiß nicht, wie es man unter Windows macht.


Was läuft bei dir falsch?
Kaffee.java, Kaffeeverwaltung.java und Kaffeesorte.java sind alle im selben Verzeichnis.


Kaffeeverwaltung.java läuft falsch! Ja, im selben Verzeichnis


und das Problem liegt daran:


also ich hab nur private static Kaffeesorte[] kaffeesortenFeld = new Kaffeesorte[i_max];

oder ist das falsch?

noch ne andere frage, muss ich am anfang eigentlich ein objekt initialisieren also in der art:
private static Kaffeeverwaltung kaffee = new Kaffeeverwaltung();
?

klar danach muss ich dann z.B. kaffee.anzahlKaffeesorte++ statt anzahlKaffeesorte++ schreiben, aber prinzipiell gehts doch auch, wenn man kein objekt vorher erstellt, oder hab ich da was falsch interpretiert…


Man muss die Klasse Kaffeeverwaltung nicht instanzieren. Das war in der Aufgabenstellung mit den Instanzvariablen Kaffeesortenfeld und Kaffeeanzahl etwas widersprüchlich formuliert, wurde aber in der Mail, die die Algo Leute verschickt haben korrigiert.
Lange Rede kurzer Sinn:
private static Kaffeeverwaltung kaffee = new Kaffeeverwaltung();
ist überflüssig.


Wo hätte man das auch instanzieren sollen? In der klasse Kaffee.java sollte man ja im Grund eh nichts verändert haben.

WK, warum schriebst du

static Kaffeesorte.Kaffeesorte[] kaffeesortenFeld=new Kaffeesorte.Kaffeesorte[100];

anstatt

static Kaffeesorte[] kaffeesortenFeld=new Kaffeesorte[100];

Das müsstest du nur machen, wenn deinen Klasse Kaffeesorte in einem Package Kaffeesorte liegt - was sie nicht sollte.