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.
Gemacht, geht leider immer noch net.
Der Fehler:
Exception in thread "main" java.lang.NullPointerException
at Verkehrte_Ausgabe.main(Verkehrte_Ausgabe.java:14)
Mit meinen bescheidenen Kenntnissen stelle ich fest, dass in Zeile 14 etwas nicht so ist, wie es sein sollte, aber was?
Der neue Code:
Java:
import java.util.Scanner;
import Prog1Tools.IOTools;
public class Verkehrte_Ausgabe {
public static void main (String args[])
{
System.out.println("Dieses Programm liest die von dir eingegebenen Zahlen rückwärts aus.");
int i = 0;
int k = 1;
int[] feld1 = null;
int[] feld2;
for (String julian = null; !julian.equals("Ja") ; i++ , k++)
{
feld1 = new int[k];
feld2 = new int[k];
System.out.println("Deine Zahl:");
feld1[i] = IOTools.readInteger();
System.out.println("Beenden?");
Scanner Eingabe = new Scanner (System.in);
julian = Eingabe.nextLine();
}
for (int j = k; -1 < j; j-- )
{
System.out.println(feld1[j]);
}
}
}
Danke für deine Antwort.
Mit den variablennamen hast du Recht, mir fiel nix ein, und was macht man da? Eigener Name
Aber ich werde in Zukunft darauf achten.
Soo, nun funktioniert jedenfalls der obere teil des Programms.
Bei der Ausgabeschleife tritt diese Fehlermeldung auf:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Verkehrte_Ausgabe.main(Verkehrte_Ausgabe.java:26)
Ich denke , dass die untere Schleife die initialisierung von feld1 in der ersten Schleife nicht übernimmt, und sich auf das "null" ganz am Anfang bezieht.
Stimmt das so?
Wie löse ich das Problem?
(Sorry nochmal, dass ich euch hier mit solchen Anfängerfragen zuspamme, aber ich will nicht ewigs an dieser Aufgabe rumhocken, so dass mir der ganze Spass an der Sache abhandenkommt)
wann tritt der Fehler auf? Wenn du nichts eingibst oder wenn du sofort Ja eingibst?
Ich wuerde dir hier eine do-While-Schleife empfehlen, damit ist sichergestellt, dass mindestens ein Durchgang stattfindet.
Du erzeugst in jedem Durchgang ein neues Int-Array der groesse k...
dann schreibst du an die k. Stelle die Eingabe.
Da das Array neu ist, sind alle stellen die du vorher belegt hast leer - null.
Loesung:
ArrayList verwenden und in jeder Iteration die neue Zahl mit list.add(k) hinzufuegen. Arraylist funktioniert wie ein dynamisches Array und ist reihenfolgentreu.
Falls du keine Liste verwenden moechtest brauchst du 2 Arrays.
du brauchst ein neues Array pro Durchlauf, das so gross ist wie du es brauchst, und du brauchst eines, das die Zahlen behaelt.
Also eines am Anfang neu machen, alles aus dem alten reinkopieren, das alte vergroessern (neu machen) und aus dem gerade kopierten zurueckkopieren...
Obwohl ich dankbar für deine Hilfe bin, möchte ich diese Aufgabe eigentlich mit den schon durch das Buch gelernten Methoden bewältigen. Also ohne kopieren oder Arraylist, da ich von beiden Sachen noch nie etwas gelesen habe.
Ich habe den Code nunmal ein bisschen umgeändert und es gibt nur noch einen Fehler: Ich kann nicht mehr als 2 Zahlen in dem Feld abspeichern, obwohl es meiner Ansicht nach genügend Elemente zur Verfügung hat....
Zusätzlich habe ich noch ein paar Textausgaben eingebaut, damit man sieht wo das Programm steckt, bzw. bis wo es funktioniert.
Code:
Java:
import java.util.Scanner;
import Prog1Tools.IOTools;
public class Verkehrte_Ausgabe {
public static void main (String args[])
{
System.out.println("Dieses Programm liest die von dir eingegebenen Zahlen rückwärts aus.");
int i = 0;
int k = 1;
int[] feld1;
int[] feld2;
feld1 = new int[k];
feld2 = new int[k];
for (String Entscheidung = "d";!"Ja".equals( Entscheidung );k++,i++)
{
System.out.println("Deine Zahl:");
feld1[i] = IOTools.readInteger();
System.out.println("Beenden?");
Scanner Eingabe = new Scanner (System.in);
Entscheidung = Eingabe.nextLine();
if (Entscheidung.equals("Ja"))
{
System.out.println("Bis hier funktionierts");
int j = i;
do
{
System.out.println("i");
System.out.println(feld1[j]);
j--;
} while (j > feld1.length);
}
else {
continue;
}
}
}
}
Ich dachte die Länge des Feldes ist dynamisch und passt sich je nach Grösse der Variablen k an....lieg ich da falsch? (Sie sollte sich durch die Schleifen steigern)
Sooo, habe nun das Problem doch mit deiner ArrayList gelöst, ist wirklich vieeeeeel praktischer, vielen Dank für diesen Vorschlag!!
Ich poste nochmal den Code rein, damit Leute die das gleiche Problem haben die Lösung sehen:
Java:
import java.util.Scanner;
import Prog1Tools.IOTools;
import java.util.ArrayList;
import java.util.List;
public class VerkehrteAusgabe_ArrayList {
public static void main (String args[])
{
System.out.println("Dieses Programm liest die von dir eingegebenen Zahlen rückwärts aus.");
ArrayList Zahlen = new ArrayList();
for (String Entscheidung = "d";!"Ja".equals( Entscheidung );)
{
System.out.println("Deine Zahl:");
int Zahleneingabe = IOTools.readInt();
Zahlen.add(Zahleneingabe);
System.out.println("Beenden?");
Scanner Eingabe = new Scanner (System.in);
Entscheidung = Eingabe.nextLine();
if (Entscheidung.equals("Ja"))
{
int j = Zahlen.size();
do
{
System.out.println(Zahlen.get(j-1));
j--;
if (j == 0){
break;
}
} while (j >= 0);
}
}
System.out.println("Beendet");
}
}
Nochmal ein grosses Danke an alle Leute die mir hier geholfen haben, obwohl manche diesen Thread sicher als lächerlich betrachten.
Achja, sorry dass ich euch hier mit solchen Noobfragen permanent aufn Sack gehe