ИМТ калькулятор с именем, весом, ростом, ИМТ и текстом с использованием массива и для цикла - PullRequest
0 голосов
/ 01 июня 2019

Я хотел бы спросить, как мне сделать, чтобы при запуске и повторении цикла имя строковой переменной увеличилось на 1. Предполагается, что эта программа спросит вас, сколько пациентов вы собираетесь написать.Если ты пишешь для экс.10, затем цикл будет повторяться 10 раз, и он запросит всю ту информацию, которую я хочу, а затем добавит ее в массив, который я уже создал, под названием BMI.Вся эта программа должна напечатать вам таблицу, которая содержит Имя, Рост в метрах, Вес в килограммах, ваш рассчитанный ИМТ, а затем текст, в каком состоянии ИМТ вы являетесь банкоматом.Проблема в том, как мне это сделать?Я только начал изучать массивы и тому подобное, и мой учитель дал мне эту домашнюю работу.Я не думаю, что это домашнее задание сложно, но просто трудно понять, что делать.

То, что я уже пробовал, это создание цикла for с именем String с именем что-то вроде этого: String name ();но это, очевидно, не сработало.

import java.util.Scanner;
class Pacient {
    public static void main(String args[]){
        int pole;
        Scanner input = new Scanner(System.in);
        String pacient; 

        System.out.print("Zadej kolik bude pacientu: "); //How many patients do you want? For ex. 10

        pacient = input.nextLine();
        input.nextLine();
        pole = Integer.parseInt(pacient);

        String[][] bmi = new String[4][pole]; //This is supposed to make an array with my patients.

        double vaha; //weight
        double vyska; //height
        String jmeno; //name
        double telo1, telo2; //body for calc.
        String vysledek; //result
        int i,x=0,j, pa=0, k=0; //some variables

        bmi[0][0] = "Jmeno"; //First line of final table NAME
        bmi[0][1] = "Vaha"; // WEIGHT
        bmi[0][2] = "Vyska"; //HEIGHT
        bmi[0][3] = "BMI"; //BMI based on calc.
        bmi[0][4] = "Text"; //Final result

        for(int y=1;y<pole;y++){
            pa++;
            x++;

            System.out.print("Zadej svoje krestni jmeno: ");
            jmeno = input.nextLine();

            System.out.print("Zadej svoji vahu v Kg: ");
            vaha = input.nextDouble();

            System.out.print("Zadej svoji vysku v m: ");
            vyska = input.nextDouble();

            System.out.println("Vase informace byly uspesne ulozeny! ");


            bmi[1][0] = jmeno; //These values should somehow increase but idk 
                                 how atm and be assign with the patient which 
                                 will be printed at the end.
            bmi[1][1] = vaha2;
            bmi[1][2] = vyska2;
            bmi[1][3] = telo3;
            bmi[1][4] = vysledek;

        }

        // System.out.println("Tisknu tabulku");

        // telo1 = vyska * vyska; //Some calc. of BMI
        // telo2 = vaha / telo1;


        // if (telo2 < 18.5) { //Adding text to the result variable
        //     vysledek = "mate podvahu";
        // } else if (telo2 < 25) {
        //     vysledek = "Jste v normach";
        // } else if (telo2 < 30) {
        //     vysledek = "Nadvaha";
        // } else {
        //     vysledek = "Obezita";
        // }

        // String telo3 = String.valueOf(telo2); //Converting to strings
        // String vyska2 = String.valueOf(vyska);
        // String vaha2 = String.valueOf(vaha);

        System.out.println("--------------------------------------------------");

        for(i=0;i<pole;i++) {
            for(j = 0; j<5; j++) System.out.print(bmi[i][j] + " ");
                System.out.println();
        }
        System.out.println("--------------------------------------------------");
    }
}

Atm программа просто печатает большую часть времени NULL NULL NULL NULL и не совпадает с номером пациента.Как добавить весь этот код в цикл for и сделать так, чтобы он автоматически преобразовывал int и double в строки, а затем печатал их правильно и назначал их для массива BMI.Если у вас есть дальнейшие квесты, не стесняйтесь спрашивать.

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Я исправил проблемы в коде. Все объясняется пошагово в комментариях. Я перевел имя переменной на английский для моего понимания. Если у вас есть вопросы. Пожалуйста, спросите.

import java.util.Scanner;

class Pacient {
    private static Scanner input;

    public static void main(String args[]) {
        int numberOfPatients; // Variables that saves number of patient
        // Asking user the number of patients
        input = new Scanner(System.in);
        System.out.print("How many patients do you want?: ");
        // I have change this to nextInt
        // From javadoc "Scans the next token of the input as an int"
        // It is essentially next() + parseInt()
        numberOfPatients = input.nextInt();
        // nextInt() does not move cursor to next line
        // using nextLine() here would move it to next line and close
        // previous line otherwise it creates issue when you will use next/nextLine again
        input.nextLine();

        // String[][] array = new String[Rows][Columns];
        // For each patient there is a row. Since in the code there is header
        // as well that's why we need numberOfPatients + 1
        String[][] bmi = new String[numberOfPatients + 1][5]; 

        // All corresponding columns  
        bmi[0][0] = "Name"; // First line of final table NAME
        bmi[0][1] = "Weight"; // WEIGHT
        bmi[0][2] = "Height"; // HEIGHT
        bmi[0][3] = "BMI"; // BMI based on calc.
        bmi[0][4] = "Result"; // Final result

        // Starting from 1. Skipping header 
        for (int y = 1; y <= numberOfPatients; y++) {
            // Using y instead of an int. This way the loop will
            // automatically move to next row

            // Instead of saving it to variable and then to array 
            // I am saving it directly
            System.out.print("Enter your first name: ");
            bmi[y][0] = input.nextLine();

            System.out.print("Enter your weight in Kg: ");
            bmi[y][1] = input.nextLine();

            System.out.print("Enter your height in m: ");
            bmi[y][2] = input.nextLine();

            // Using the information from above to calculate BMI
            // Basically I am storing and calculating at the same time
            // parseDouble converts String into double 
            // Math.pow(a,b) is powber function. a is base and b is exponent 
            double weight = Double.parseDouble(bmi[y][1]);
            double heightSquare = Math.pow(Double.parseDouble(bmi[y][2]), 2);
            double bmiCalculated = weight / heightSquare;

            // Based on BMI assigning result in result column
            bmi[y][3] = bmiCalculated + "";
            if (bmiCalculated < 18.5) {
                bmi[y][4] = "You are underweight";
            } else if (bmiCalculated > 18.5 && bmiCalculated < 25) {
                bmi[y][4] = "You are normal";
            } else if (bmiCalculated > 25 && bmiCalculated < 30) {
                bmi[y][4] = "You are overweight";
            } else {
                bmi[y][4] = "You are obese";
            }
            System.out.println("Your information has been saved successfully!");
        }

        System.out.println("--------------------------------------------------");

        // In java 2D arrays are multiple 1D array stacked on each other
        // bmi.length gives the number of rows
        // Basically you iterate through each row and print each individual row
        // like 1D array
        for (int i = 0; i < bmi.length; i++) {
        // bmi[i] gives ith row. Which is 1D array. So you can print it like normal array
            for (int j = 0; j < bmi[i].length; j++)
                System.out.print(bmi[i][j] + " ");
            System.out.println();
        }
        System.out.println("--------------------------------------------------");
    }
}
0 голосов
/ 01 июня 2019

Ваше объявление массива и реализации противоречивы.Вы зафиксировали первое измерение и сохранили второе, переменное.Но вы используете, как будто первый переменный, а второй фиксированный.

Вы должны объявить свой массив как

String[][] bmi = new String[pole+1][4];

pole+1, потому что вы 'повторное использование первой строки для заголовков таблицы

Ваш первый цикл должен выглядеть следующим образом

for(int y = 1; y < pole+1; y++){
    for(int z = 0; z < 4; z++){
        String data="ask user for data";
        bmi[y][z] = data; //similar for all
    }
}

Ваш выходной цикл for также будет выглядеть выше.

...