Fitness-Rechner: NullPointerException

moshpit

Mitglied
Hallo Community,

ich melde mich mal wieder wegen einer etwas umfangreicheren Aufgabe (zumindest für meine Verhältnisse). Geschrieben werden soll ein Fitness-Rechner, der Daten zur Person erfasst, was sie gegessen hat (Tabelle nach Vorgabe) und einen Trainingsplan aufstellt.

So weit bin ich schon:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;


public class FitnessCalc {
	
	private static int listofdata[];
	private static int dauer[];
	
	/**
	public FitnessCalc() throws IOException{
		Datenmaske();
	}
	 * @throws IOException **/
	
	//Methode Hauptmenü
	public static void Hauptmenue() throws IOException {
	BufferedReader main_menu = new BufferedReader (new InputStreamReader(System.in));
	Scanner main_choice = new Scanner (System.in);
	try{
	System.out.println("=====================================================");
	System.out.println("                     HAUPTMENÜ                  ");
	System.out.println("=====================================================");
	System.out.println("             IHRE OPTIONEN:");
	System.out.println();
	System.out.println("             1. Eigene Daten eingeben");
	System.out.println("             2. Berechnung starten");
	System.out.println("             3. Programm beenden");
	System.out.println("=====================================================");
	int auswahl_main = main_choice.nextInt();
	
	System.out.println();
	
	switch (auswahl_main) {
	case 1: 
		Datenmaske();
		break;
	case 2:
		Konsum();
		break;
	case 3:
		System.out.println("=====================================================");
		System.out.println("           *** Programm wird beendet! ***");
		System.out.println("_____________________________________________________");
		break;
	default: 
		System.out.println("=====================================================");
		System.out.println("        *** Bitte richtige Eingabe machen ***");
		System.out.println("_____________________________________________________");
		try {
			Hauptmenue();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		break;
	}
	}catch (InputMismatchException e){
		System.out.println("Fehler! Programm wird neu gestartet!");
		Hauptmenue();
	}
}
	

	
	//Methode für Dateneingabe
	public static int[] Datenmaske() throws IOException{
		int[] listofdata = new int[4];
		int gender=0;
		Scanner datainput = new Scanner (System.in);
		BufferedReader data = new BufferedReader (new InputStreamReader(System.in));
		System.out.println("=====================================================");
		System.out.println("            *** Starte Datenmaske... ***");
		System.out.println("_____________________________________________________");
		System.out.println();
		System.out.println("1. Bitte geben Sie ihr Gewicht in Kilogramm (kg) an: ");
		int gewicht = datainput.nextInt();
		System.out.println("2. Bitte geben Sie ihr Alter in Jahren an: ");
		int alter = datainput.nextInt();
		System.out.println("3. Bitte geben Sie ihre Körpergröße \nin Zentimetern (ohne Nachkommastellen) an: ");
		int groesse = datainput.nextInt();
		System.out.println("4. Bitte geben Sie ihr Geschlecht an (m / w): ");
		char geschlecht = (char) data.read();
		switch (geschlecht){
		case 'm':
			gender = 1;
			break;
		case 'w':
			gender = 2;
			break;
		}
		listofdata[0]=gewicht;
		listofdata[1]=alter;
		listofdata[2]=groesse;
		listofdata[3]=geschlecht;
		
		System.out.println();
		System.out.println("Sie haben angegeben: \nGewicht: " + gewicht + " kg \nAlter: " + alter + " Jahre \nGröße: " + groesse + " cm \nGeschlecht: " + gender);
		System.out.println();
		System.out.println("Wollen Sie die Konsumermittlung starten?");
		System.out.println("1. JA");
		System.out.println("2. NEIN");
		int start = datainput.nextInt();
		switch (start){
		case 1:
			Konsum();
		case 2:
			Hauptmenue();
		default: 
			Datenmaske();
		}
		datainput.close();
	
		return listofdata;
	}
	
	
	
	//
	//Methode für Konsumermittlung
	public static int[] Konsum() throws IOException{
		Scanner calc = new Scanner(System.in);
		System.out.println("=====================================================");
		System.out.println("            *** Starte Calculator... ***");
		System.out.println("_____________________________________________________");
		System.out.println("Bitte geben Sie an, wieviel von welcher \nder folgenden Lebensmittel Sie gegessen haben: ");
		System.out.println();
		System.out.println("a. Glühwein (1 Tasse): ");
		int gluehwein = calc.nextInt();
		System.out.println("b. Lebkuchen (1 Stück): ");
		int lebkuchen = calc.nextInt();
		System.out.println("c. Portion Heiße Maronen (100g): ");
		int maronen = calc.nextInt();
		System.out.println("d. Portion Gebrannte Mandeln (100g): ");
		int mandeln = calc.nextInt();
		System.out.println("e. Spekulatious (1 Stück): ");
		int spekulatius = calc.nextInt();
		System.out.println("Sie haben folgende Angaben gemacht: " +
				"\nGlühwein: " + gluehwein + " Tassen" +
					"\nLebkuchen: " + lebkuchen + " Stück" +
						"\nMaronen: " + (maronen*100) + " Gramm" +
							"\nMandeln: " + (mandeln*100) + " Gramm\n" +
								"Spekulatius: " + spekulatius + " Stück");
		System.out.println();
		System.out.println("Bitte geben Sie ihre Trainigsdauer (in Stunden) an: ");
		System.out.println("1. Crosstrainer: ");
		int dauer_cross = calc.nextInt();

		System.out.println("2. Stepper: ");
		int dauer_step = calc.nextInt();
		
		System.out.println("3. Laufband: ");
		int dauer_lauf = calc.nextInt();
		calc.close();

		int [] dauer = new int[3];
		dauer[0] = dauer_cross;
		dauer[1] = dauer_step;
		dauer[2] = dauer_lauf;
		
		switch (listofdata[3]){
		//MÄNNER
		case 109:
			CalcMen();
			break;
		//FRAUEN
		case 119:
			CalcWomen();
			break;
		}
		return dauer;
		
	}
	
	//
	//Methode für Berechnung Frauen
	public static double[] CalcWomen(){
		double[] berechnet_w = new double[3];
		double stepper = 8.3;
		double crosstrain = 7.9;
		double lauf = 7.7;
		
		//Crosstrainerberechnung Männer
				double cross_kcal_m = 0;
				cross_kcal_m = ((66.47 + (13.7 * listofdata[0]) + (5 * listofdata[2]) - (6.8 * listofdata[1])) * (dauer[0] / 24) * (crosstrain - 1));
				berechnet_w[0] = cross_kcal_m;
				
				//Stepperberechnung für Männer
				double step_kcal_m = 0;
				step_kcal_m = ((66.47 + (13.7 * listofdata[0]) + (1.8 * listofdata[2]) - (6.8 * listofdata[1])) * (dauer[1] / 24) * (stepper - 1));
				berechnet_w[1] = step_kcal_m;
				
				//Laufbandberechnung für Männer
				double  lauf_kcal_m = 0;
				lauf_kcal_m = ((66.47 + (13.7 * listofdata[0]) + (5 * listofdata[2]) - (6.8 * listofdata[1])) * (dauer[2] / 24) * (lauf - 1));
				berechnet_w[2] = lauf_kcal_m;
				
				
				try {
					Hauptmenue();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			return berechnet_w;
	}
	
	
	//
	//Methode für Berechnung Männer
	public static double[] CalcMen(){
		double[] berechnet_m = new double[3];
		double stepper = 8.3;
		double crosstrain = 7.9;
		double lauf = 7.7;
		
		//Crosstrainerberechnung Männer
				double cross_kcal_m = 0;
				cross_kcal_m = ((66.47 + (13.7 * listofdata[0]) + (5 * listofdata[2]) - (6.8 * listofdata[1])) * (dauer[0] / 24) * (crosstrain - 1));
				berechnet_m[0] = cross_kcal_m;
		
		//Stepperberechnung für Männer
				double step_kcal_m = 0;
				step_kcal_m = ((66.47 + (13.7 * listofdata[0]) + (1.8 * listofdata[2]) - (6.8 * listofdata[1])) * (dauer[1] / 24) * (stepper - 1));
				berechnet_m[1] = step_kcal_m;
		
		//Laufbandberechnung für Männer
				double  lauf_kcal_m = 0;
				lauf_kcal_m = ((66.47 + (13.7 * listofdata[0]) + (5 * listofdata[2]) - (6.8 * listofdata[1])) * (dauer[2] / 24) * (lauf - 1));
				berechnet_m[2] = lauf_kcal_m;
	
		return berechnet_m;
	}

	//Hauptprogramm mit UI
	public static void main(String[] args) {
		FitnessCalc fc = new FitnessCalc();

		System.out.println("*****************************************************");
		System.out.println("       WILLKOMMEN BEI IHREM FITNESS-CALCULATOR  ");
		System.out.println("*****************************************************");
		try {
			Hauptmenue();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
}
}

Hier passiert beim Ausführen der Methode "Konsum" nach Eingabe der Werte über die Konsole nach dem letzten Wert folgendes:

Exception in thread "main" java.lang.NullPointerException
at FitnessCalc.Konsum(FitnessCalc.java:166)
at FitnessCalc.Datenmaske(FitnessCalc.java:111)
at FitnessCalc.Hauptmenue(FitnessCalc.java:41)
at FitnessCalc.main(FitnessCalc.java:249)

Eigentlich sollte die Methode dann die entsprechende Methode CalcMen/CalcWomen aufrufen, wenn in listofdata[3] der Wert 1(=männlich) oder 2(=weiblich) hinterlegt ist.


Ich komm nich drauf, was da falsch läuft! Someone out there to help me out? ;)

Schonmal vielen Dank!
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Die Fehlermeldung zeigt Dir ja in welcher Zeile der Fehler auftritt.
Das ganze statische ist mehr als unschön, sowas kann man mal für kleinere Tests machen.

Das Problem liegt bei
Code:
listofdata
die Variable ist vermutlich nicht initialisiert. In
Code:
Datenmaske()
wird eine lokale Variable mit dem selben Namen verwendet. Diese wird auch zurückgegeben aber nirgends "angenommen" bzw. zugewiesen.
 

moshpit

Mitglied
Hallo Michael...

Vielen Dank für deine schnelle Antwort!
Wie "nehme" ich denn diese Variable an bzw. wie weise ich sie zu? Eigentlich soll das Array listofdata[] in der Methode Datenmaske() gefüllt werden und dann global zur Verfügung stehen, um in jeder Methode darauf zurückgreifen zu können. Ist das irgendwie machbar? Hab beim heiligen Orakel & Konsorten leider nichts brauchbares entdecken können :(



P.S.
Man sollte vlt dazu sagen, dass ich Wirtschaftsinformatikstudent im ersten Semester bin :)
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Man sollte vlt dazu sagen, dass ich Wirtschaftsinformatikstudent ... bin
Ob das eine gute Idee war ;-)

Grundsätzlich (Wenn der Anwender nicht erst "2" vor "1" drückt) sollte es schon funktionieren, wenn Du in
Code:
Datenmaske()
direkt die "globale" Variable verwendest und in deren ersten Zeile einfach das
Code:
int[]
vor
Code:
listofdata
, das return am Ende der Methode kannst Du Dir dann sparen und die Methode void machen.
 

bERt0r

Top Contributor
Das liegt daran, dass du dein int array erst in der Methode Datenmaske erstellst. Vorher isses null. Genau die Art von Fehler entsteht wenn man globale static Variablen benutzt.
 

moshpit

Mitglied
Das liegt daran, dass du dein int array erst in der Methode Datenmaske erstellst. Vorher isses null. Genau die Art von Fehler entsteht wenn man globale static Variablen benutzt.

Was wäre denn eine elegantere Lösung, um die Variablen global für alle Methoden zugänglich zu machen? Wenn ich das Array nur in
Java:
 Datenmaske()
initialisiere, wird in anderen Methoden bei Zugriffsversuch auf die Variable eine Fehlermarkierung angegeben.

Ich hab noch nich so den Überblick über die spezielle Herangehensweise in Java, aber ich will lernen :rtfm:
 

bERt0r

Top Contributor
Du kannst das Array per Parameter an deine Konsum Methode übergeben:
Java:
public static int[] Konsum(int[] listOfData){...
Ausserdem wirst du wohl bei deiner Struktur um eine listOfData==null Prüfung nicht herumkommen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U URI Rechner Allgemeine Java-Themen 4
U URI Rechner Allgemeine Java-Themen 2
U URI Rechner (Java Script) Allgemeine Java-Themen 7
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Alex_99 Rechner: Wert zwischenspeichern und bei Bedarf mit Ihm weiterrechnen? Allgemeine Java-Themen 6
M Rechner dez in Hex umwandeln Allgemeine Java-Themen 5
A Rechner in Android Studio Allgemeine Java-Themen 2
H Projekt Quadraturverfahren Rechner Allgemeine Java-Themen 2
N Eclipse Dynamisches-Web-Project auf anderen Rechner transportieren Allgemeine Java-Themen 5
KilledByCheese Dezimal nach Hexadezimal rechner wirft seltsame exception Allgemeine Java-Themen 4
P Mehrere Java Versionen auf dem Rechner Allgemeine Java-Themen 3
S BMI Rechner mit eclipse Visual Editor (Seperates Fenster) Allgemeine Java-Themen 7
Thallius Serialisiertes File kann auf anderem Rechner nicht geladen werden Allgemeine Java-Themen 12
D IP-Adresse der Rechner im Netzwerk auflisten Allgemeine Java-Themen 2
K Programm startet nur auf eigenem Rechner??? Allgemeine Java-Themen 6
M Linux Rechner per ssh runterfahren mit Java Allgemeine Java-Themen 8
M AWT JAVA Rechner Allgemeine Java-Themen 20
E eindeutige Id's für Rechner Allgemeine Java-Themen 7
Landei Kleiner UPN-Rechner für BigIntegers Allgemeine Java-Themen 5
S Dem Rechner klarmachen das Java 1.5 installiert ist Allgemeine Java-Themen 13
F Zugriff auf lokalen Rechner wer weiss Rat ? Allgemeine Java-Themen 16
M ireport (Jasper Report) geht nur auf meinen Rechner Allgemeine Java-Themen 3
S Rechner formatiert - nichts geht mehr. Allgemeine Java-Themen 2
S jar-datei auf anderem Rechner nicht ausführbar. Allgemeine Java-Themen 40
W Datei und druckerfreigaben von lokalem Rechner auslesen. Allgemeine Java-Themen 2
N entfernten rechner runterfahren => putty-ersatz Allgemeine Java-Themen 8
B Mehrere Versionen auf einem Rechner Allgemeine Java-Themen 2
A Java-Applikation auf einem anderen Rechner starten Allgemeine Java-Themen 17
L kleine frage zum rechner Allgemeine Java-Themen 7
X Java Wirrwarr auf dem Rechner Allgemeine Java-Themen 5
B Rechner stürzt ab wenn Java-Anwendungen geöffnet werden! Allgemeine Java-Themen 2
thE_29 Linux-Rechner herunterfahren Allgemeine Java-Themen 3
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
T imagej-server NullPointerException Allgemeine Java-Themen 1
L Methoden NullpointerException Allgemeine Java-Themen 5
B OOP Auslöser für NullPointerException Allgemeine Java-Themen 3
I Vererbung Nicht erklärliche NullPointerException Allgemeine Java-Themen 7
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
F Input/Output NullPointerException with Apache POI Allgemeine Java-Themen 7
P wiedermal NullPointerException Allgemeine Java-Themen 2
kodela NullPointerException Allgemeine Java-Themen 2
L Variablen NullPointerException (RSA) Allgemeine Java-Themen 2
B NullPointerException bei @Inject JSF Allgemeine Java-Themen 0
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
G String an Arduino senden NullPointerException in PrintWriter Allgemeine Java-Themen 6
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
R NullPointerException Ohne Grund Allgemeine Java-Themen 5
D ByteBuffer getInt NullpointerException Allgemeine Java-Themen 4
S JavaMail - MailSubject,MailFrom,MailDate in String Array speichern NullPointerException Allgemeine Java-Themen 2
T Compiler-Fehler NullpointerException! Allgemeine Java-Themen 7
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
L NullPointerException bei Instanzvarialen Allgemeine Java-Themen 3
B Compiler-Fehler NullPointerException beim Auslesen von .lang-Datei Allgemeine Java-Themen 3
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
H java.lang.NullPointerException Allgemeine Java-Themen 5
L Interpreter-Fehler java.lang.NullPointerException Allgemeine Java-Themen 17
M JSON NullPointerException Allgemeine Java-Themen 5
M NullpointerException Allgemeine Java-Themen 2
L Eclipse NullPointerException Allgemeine Java-Themen 6
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
K Unerklärliche nullpointerexception Allgemeine Java-Themen 6
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S javadoc java.lang.NullPointerException Allgemeine Java-Themen 2
K 3Dimensionales Feld - NullPointerException Allgemeine Java-Themen 2
J Compiler-Fehler NullPointerException Allgemeine Java-Themen 12
T Compiler-Fehler NullPointerException bei ADT LinkedTree Allgemeine Java-Themen 31
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
3 MP3-Finder wirft NullPointerException Allgemeine Java-Themen 13
M NullPointerException MenuItem Allgemeine Java-Themen 7
S Dialog einblenden bei NullPointerException Allgemeine Java-Themen 5
T DefaultTableModel NullPointerException Allgemeine Java-Themen 7
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
B NullPointerException ohne Angabe Allgemeine Java-Themen 5
F NullPointerException aber warum ? Allgemeine Java-Themen 9
F Array NullPointerException Allgemeine Java-Themen 26
B NullPointerException bei Wertzuweisung Allgemeine Java-Themen 3
C NullPointerException Allgemeine Java-Themen 9
MonsterBit java.lang.NullPointerException Allgemeine Java-Themen 2
O NullPointerException (wohl Denkfehler) Allgemeine Java-Themen 5
N Warum nullPointerException? Allgemeine Java-Themen 13
N Generics-NullpointerException Allgemeine Java-Themen 7
J NullPointerException mit HashMap Allgemeine Java-Themen 2
B NullPointerException bei new XStream() Allgemeine Java-Themen 2
J java.lang.NullPointerException bei Threadprogrammierung Allgemeine Java-Themen 9
J NullPointerException bei JasperReports Allgemeine Java-Themen 2
V NullPointerException bei Vector Allgemeine Java-Themen 2
G Warum kommt hier NullPointerException? Allgemeine Java-Themen 3
G NullPointerException Allgemeine Java-Themen 5
R Immer wieder NullPointerException Allgemeine Java-Themen 2
M NullPointerException Allgemeine Java-Themen 4
J Fehler: java.lang.NullPointerException Allgemeine Java-Themen 2
G NullPointerException, aber warum? Allgemeine Java-Themen 10
G NullPointerException problem Allgemeine Java-Themen 30

Ähnliche Java Themen

Neue Themen


Oben