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:
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!
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: