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.
Nun sollen wir in zehn Array Feldern zehn verschiedene Klassen "BereichsUmsatz" anlegen.
[Java]
public class Aufgabe1 {
class BereichsUmsatz
{
String bereich;
double umsatz;
}
public static void main(String[] args) {
int i;
BereichsUmsatz[] bu = new BereichsUmsatz[10];
bu[0] = new BereichsUmsatz();
bu[1] = new BereichsUmsatz();
bu[2] = new BereichsUmsatz();
bu[3] = new BereichsUmsatz();
bu[4] = new BereichsUmsatz();
bu[5] = new BereichsUmsatz();
bu[6] = new BereichsUmsatz();
bu[7] = new BereichsUmsatz();
bu[8] = new BereichsUmsatz();
bu[9] = new BereichsUmsatz();
bu[10] = new BereichsUmsatz();
Mal abgesehen davon, dass ich den Sinn des Codes von Zeile 14 bis 24 nicht verstanden hab???:L, gibt er mir in Zeile 14 folgende Fehlermeldung aus:
"No enclosing instance of type Aufgabe1 is accessible. Must qualify the allocation with an enclosing instance of type Aufgabe1 (e.g. x.new A() where x is an
instance of Aufgabe1)."
Ich hab schon viel von Setter und Getter gelesen. Schätze mal, das sind diese Methoden, die in Klassen vorkommen. Allerdings hat unser Prof darauf bestanden, dass die Klasse so bleibt wie sie ist und da kann ich, wenn ich mich nicht täusche, diese Methoden nicht verwenden.
Es liegt daran dass die main() Methode static ist. Er erwartet jetzt sowas wie:
Code:
bu[0] = new Aufgabe1().new BereichsUmsatz();
Angenommen die Methode wäre NICHT static ginge auch sowas:
Code:
bu[0] = new Aufgabe1.BereichsUmsatz();
Dritte Möglichkeit: Die innere Klasse BereichsUmsatz wird ebenfalls static. Dann funktioniert dein Code.
Code:
bu[0] = new BereichsUmsatz();
Ich weiss jetzt leider nicht was euer Prof erwartet. Weil er sagt die Klasse darf nicht verändert werden. Um die BereichsUmsatz Klasse static zu machen schreibt man:
Code:
static class BereichsUmsatz
{
String bereich;
double umsatz;
}
Ich finde Java momentan noch wesentlich komplizierter als C. Kann das sein? Mit den Strukturen in C bin ich super klar gekommen. Hier ändert sich gleich alles, nur weil ich die main als statisch definiere...:noe:
Ich verwende Eclipse als Umgebung. Vll gibts ja dazu auch ne Alternative. Bin mit Eclipse eh nich ganz zufrieden.
Hallo. Ich persönlich finde Java deutlich angenehmer als C, aber das ist nur meine Meinung
Dein Problem ist, dass die Klasse "BereichsUmsatz" als normale Klasse INNERHALB der Klasse "Aufgabe1" definiert ist. Somit kann nur ein Objekt der Klasse Aufgabe1 einen neuen "BereichsUmsatz" erstellen.
Somit muss das ganze Feld (Array) von der Mainmethode nach Aufgabe1 verschoben werden, z.B. so:
Java:
public class Aufgabe1 {
class BereichsUmsatz
{
String bereich;
double umsatz;
}
private BereichsUmsatz[] bu;
public Aufgabe1() {
bu = new BereichsUmsatz[10];
bu[0] = new BereichsUmsatz();
bu[1] = new BereichsUmsatz();
bu[2] = new BereichsUmsatz();
bu[3] = new BereichsUmsatz();
bu[4] = new BereichsUmsatz();
bu[5] = new BereichsUmsatz();
bu[6] = new BereichsUmsatz();
bu[7] = new BereichsUmsatz();
bu[8] = new BereichsUmsatz();
bu[9] = new BereichsUmsatz();
bu[0].bereich = "Bremen";
bu[0].umsatz = 5000;
bu[1].bereich = "Dresden";
bu[1].umsatz = 9000;
bu[2].bereich = "Frankfurt";
bu[2].umsatz = 12000;
bu[3].bereich = "Hamburg";
bu[3].umsatz = 1000;
bu[4].bereich = "Hannover";
bu[4].umsatz = 8000;
bu[5].bereich = "Köln";
bu[5].umsatz = 3000;
bu[6].bereich = "Leipzig";
bu[6].umsatz = 3000;
bu[7].bereich = "München";
bu[7].umsatz = 4000;
bu[8].bereich = "Potsdam";
bu[8].umsatz = 5000;
bu[9].bereich = "Stuttgart";
bu[9].umsatz = 8000;
}
public static void main(String[] args) {
Aufgabe1 aufgabe = new Aufgabe1();
for(int i = 0; i < 10; i++)
{
System.out.println(aufgabe.bu[i].bereich);
System.out.println(aufgabe.bu[i].umsatz);
}
}
}
ALLERDINGS: Wenn der Prof dir NUR diese Klasse vorgegeben hat, und NICHT Aufgabe1, dann darfst du wahrscheinlich BereichsUmsatz in der eigenen BereichsUmsatz.java-Datei definieren - Dann ist es keine innere Klasse mehr und du kannst es verwenden, ohne eine "enclosing instance" vom Typ Aufgabe1 zu haben. Wenn das zu kompliziert war, sag ruhig bescheid, dann erklär ich's nochmal einfacher.
Außerdem gibt es für die Klasse des Professors deutlich sinnvollere Lösungswege (Konstruktor z.B.), du kannst eine Befüllung des Arrays auch mit for-Schleife vornehmen, etc...
Ja, das war auch nur als Beispiel gedacht. Natürlich brauchst du um ein Java Programm zu starten eine "public static void main(String[] args])". Ich wollte nur zeigen dass es am "static" liegt, dass du die innere Klasse nicht so ansprechen kannst wie es üblich wäre. "new AeussereKlasse.InnereKlasse()"
@Ikaron:
Vielen Dank! Das wars Erinner mich grad, dass der Prof auch sowas in der Richtung gesagt hat. Hab einfach in meinem Projekt ne neue Klasse geöffnet. Eben die BereichsUmsatz-Klasse