Hallo zusammen,
ich muss ein Programm schreiben, welches sich Daten aus einer Datei "Artikel.txt" herauszieht (Artikelnummer, Artikelbezeichnung, Maximalbestand, Preis) und damit den Maximalwert pro Artikel berechnen (Preis * Maximalbestand). Außerdem soll eine Trennung der Artikel in 2 Listen erfolgen, indem geprüft wird, ob an Stelle 6 und 7 der Artikelnummer jeweils eine "2" steht --> wenn ja, dann ab damit in Liste "Tueren" wenn nein, dann ab in Liste "Rest". Anschließend sollen die Maximalwerte absteigend sortiert ausgegeben werden.
- Das auslesen aus der Artikel.txt funktioniert
- Das Aufteilen in die zwei Listen "Tueren" und "Rest" funktioniert
- Das berechnen des Maximalwertes funktioniert
- Die absteigende Sortierung klappt aber leider noch nicht
Fehlermeldung in Zeile 70:
Exception in thread "main" java.lang.NullPointerException
at pruefungneu_package.PRUEFUNGNEUCLASS.main(PRUEFUNGNEUCLASS.java:70)
also müsste Tueren[k].maxwert = null sein. Nur weiß ich nicht wieso.. bzw. wo ich den Denkfehler hab.
Hier der Code:
Danke schonmal vorab.
Grüße
ich muss ein Programm schreiben, welches sich Daten aus einer Datei "Artikel.txt" herauszieht (Artikelnummer, Artikelbezeichnung, Maximalbestand, Preis) und damit den Maximalwert pro Artikel berechnen (Preis * Maximalbestand). Außerdem soll eine Trennung der Artikel in 2 Listen erfolgen, indem geprüft wird, ob an Stelle 6 und 7 der Artikelnummer jeweils eine "2" steht --> wenn ja, dann ab damit in Liste "Tueren" wenn nein, dann ab in Liste "Rest". Anschließend sollen die Maximalwerte absteigend sortiert ausgegeben werden.
- Das auslesen aus der Artikel.txt funktioniert
- Das Aufteilen in die zwei Listen "Tueren" und "Rest" funktioniert
- Das berechnen des Maximalwertes funktioniert
- Die absteigende Sortierung klappt aber leider noch nicht
Fehlermeldung in Zeile 70:
Exception in thread "main" java.lang.NullPointerException
at pruefungneu_package.PRUEFUNGNEUCLASS.main(PRUEFUNGNEUCLASS.java:70)
also müsste Tueren[k].maxwert = null sein. Nur weiß ich nicht wieso.. bzw. wo ich den Denkfehler hab.
Hier der Code:
Java:
package pruefungneu_package;
import Prog1Tools.IOTools;
import java.io.*;
public class PRUEFUNGNEUCLASS
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
String zeile[] = Einlesen(); //Daten werden über UP aus Artikel.txt eingelesen
class Artikel
{
String anr;
String abez;
String maxbestand;
String preis;
Double maxwert;
}
Artikel [] Tueren = new Artikel[20];
Artikel [] Rest = new Artikel[20];
int t = 0;
int r = 0;
for (int i=0; i<20; i++)
{
if (Integer.parseInt(zeile[i].substring(5,7))==22)
{
Tueren[t] = new Artikel();
Tueren[t].anr = zeile[i].substring(0,8);
Tueren[t].abez = zeile[i].substring(9,40);
Tueren[t].maxbestand = zeile[i].substring(48,52);
Tueren[t].preis = zeile[i].substring(99,106);
Tueren[t].maxwert = Integer.parseInt(Tueren[t].maxbestand)*Double.parseDouble(Tueren[t].preis);
t = t+1;
}
else
{
Rest[r] = new Artikel();
Rest[r].anr = zeile[i].substring(0,8);
Rest[r].abez = zeile[i].substring(9,40);
Rest[r].maxbestand = zeile[i].substring(48,52);
Rest[r].preis = zeile[i].substring(99,106);
Rest[r].maxwert = Integer.parseInt(Rest[r].maxbestand)*Double.parseDouble(Rest[r].preis);
r=r+1;
}
}
//Start Sortierung Tueren
int m = t;
double [] uebergabe = new double[m+1];
for (int i=0; i<t; i++)
{
uebergabe[i] = Tueren[i].maxwert;
}
while (m>1)
{
int k = MaSu(m,uebergabe);
Tueren[m+1].maxwert = Tueren[k].maxwert;
Tueren[k].maxwert = Tueren[m].maxwert;
Tueren[m].maxwert = Tueren[m+1].maxwert;
m=m-1;
}
//Start Sortierung Rest
//int o = r;
//while (o>0)
//{
//int e = MaSu(o,Rest[o].maxwert);
//Rest[o+1].maxwert = Rest[e].maxwert;
//Rest[e].maxwert = Rest[o].maxwert;
//Rest[o].maxwert = Rest[o+1].maxwert;
//o=o-1;
//}
for (int i=0; i<t; i++)
{
System.out.println("Maxwert : " + Tueren[i].maxwert);
}
//System.out.println();
//for (int i=0; i<r; i++)
//{
//System.out.println("Anr : " + Rest[i].anr);
//}
}
//Unterprogramm Maximumsuche
public static int MaSu(int n, double [] v)
{
int k=0;
double max = v[0];
for (int i=1; i<=n; i++)
{
if (max < v[i])
{
k = i;
max = v[i];
}
}
return k;
}
//Unterprogramm zum Einlesen
public static String[] Einlesen()
{
int n = 0; // Anzahl der gelesenen Sätze
String[] zeile; // Referenzvariable
zeile = new String[50]; // Array von 50 Strings
try
{
FileReader fr = new FileReader("ARTIKEL.TXT");
BufferedReader input = new BufferedReader(fr);
zeile[n] = input.readLine();
while ( zeile[n] != null ) // Ist zeile[n] noch eine "richtige" Textzeile?
{
n = n+1;
zeile[n] = input.readLine();
} // while-Ende
input.close();
} // try-Ende
catch (IOException lesefehler)
{
System.out.println("Lesefehler " + lesefehler);
}
return zeile;
}
}
Danke schonmal vorab.
Grüße