Java Vokabelprogramm geht nicht D:

...komplette Frage anzeigen

3 Antworten

Das Programm erzeugt die beiden Arrays erste und zweite gleich zu Beginn:

static String[] erste= new String [a];
static String[] zweite= new String [a];

Dumm ist dabei nur, daß das Programm zu diesem Zeitpunkt eigentlich noch gar nicht wissen kann, wie groß a sein soll. Diese Zahl wird ja erst in der Funktion mine() eingelesen:

int a = anzahl.nextInt();

a ist also noch nicht initialisiert, wird aber schon benutzt. Das ist ein logischer Fehler. Etliche Compiler anderer Programmiersprachen würden hier eine Warnung ausgeben. Auch der Java-Compiler würde das tun, wenn es keine statische globale Variable wäre.

Der Java-Compiler übergeht aber den Fehler in diesem Fall einfach, ohne etwas zu sagen. Stattdessen tut er etwas sehr naives und gefährliches, das die Entwickler für eine schlaue Idee hielten, und worauf man als Java-Programmierer unbedingt Obacht geben muß: Er gibt der nichtinitialisierten Variablen einfach den Wert 0.

Diesen Wert 0 benutzt Dein Programm jetzt und erzeugt zwei String-Arrays mit der Länge 0. In diesen Arrays ist kein Platz für irgendetwas. Das fliegt in dem Moment auf, in dem das erste englische Wort eingegeben ist und im Array gespeichert werden soll.

Was Du ändern mußt: Erzeuge die beiden Arrays nicht oben, wo Du sie deklarierst. Erzeuge sie erst, sobald a eingelesen ist.

Und noch etwas: Du hast a gleich zweimal deklariert: Einmal oben für die Klasse Main, und dann nochmal lokal für die Funktion mine(). Falls Du mit beiden Variablen dasselbe meinst, und danach schaut es hier aus, ist eine Deklaration zuviel. Denk darüber nach, welche von beiden Du lassen solltest, und welche Du besser wegläßt.

Antwort bewerten Vielen Dank für Deine Bewertung
  1. Warum hast du 3 Scanner angelegt? Das ganze funktioniert auch nur mit einem
  2. Bei for-Schleifen gibt es extra Platz um den Zähler zu erhöhen, warum benutzt du diesen nicht? for (int o = 0; o<a; o++)

  3. Die Variable a fehlt in der Methode zweites()

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Franz1957
08.07.2013, 17:00

Zu 3.: Die Variable a ist schon oben für die Klasse Main definiert. Man übersieht es hier leicht, weil dieser Teil des Codes außerhalb des Kastens gelandet ist. a wird gerade dort oben gebraucht, um die String-Arrays zu dimensionieren. Falsch ist, sie in der Methode mine() nochmal lokal zu definieren, und die Arrays zu erzeugen, bevor der Wert von a bekannt ist.

1

Falls du öfters mit Java programmierst am besten im www.java-forum.org anmelden.

Also ausgeführt wird es. Es sollte dann aber zu einer Exception kommen :-)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von HerrWagner
08.07.2013, 15:31

Falls du mal meinen funktionierenden Ansatz sehen wills bitte melden.

0

Was möchtest Du wissen?