I'm developing a system that calculates BMI. I'm making on NetBeans (I'm newbie in this IDE)
However i'm caught in a point... I'd like to print the values of a StringBuilder on a textArea with line break, but I can't do it.
The code (person class):
package Entities;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
public class person {
private String name;
private Double weight;
private Double height;
private Double BMI;
private String diagnosisDate;
private String result;
private Integer gender;
public person() {
}
public person(Integer gender) {
this.gender = gender;
}
public person(String name, Double weight, Double height, String diagnosisDate, Integer gender) {
this.name = name;
this.weight = weight;
this.height = height;
this.diagnosisDate = diagnosisDate;
this.gender = gender;
}
public person(String name, Double weight, Double height, String diagnosisDate) {
this.name = name;
this.weight = weight;
this.height = height;
this.diagnosisDate = diagnosisDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getWeight() {
return weight;
}
public void setWeight(Double weight) {
this.weight = weight;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
public Double getBMI() {
return BMI;
}
public void setBMI(Double BMI) {
this.BMI = BMI;
}
public String getDiagnosisDate() {
return diagnosisDate;
}
public void setDiagnosisDate(String diagnosisDate) {
this.diagnosisDate = diagnosisDate;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public void calculateBMI() {
this.BMI = (this.weight / (Math.pow(this.height, 2)));
}
public String diagnosisDate() {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
return dtf.format(LocalDateTime.now());
}
// BMI calculation - MALE
public String BMIMale() {
BMI = (weight / (Math.pow(height, 2)));
double weightDifference;
double getFatWeightQuantity;
double loseWeightQuantity;
StringBuilder sb = new StringBuilder();
// Underweight
if (BMI < 20.70) {
result = "UnderWeight";
weightDifference = (Math.pow(height, 2) * 18.50) - weight;
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to fatten " weightDifference " to have a weight appropriate to your height");
sb.append("");
sb.append("RESULT: " this.result ".");
}
// Ideal Weight
if (BMI >= 20.70 && BMI <= 26.40) {
result = "Ideal Weight";
weightDifference = (Math.pow(height, 2) * 18.50) - weight;
getFatWeightQuantity = (Math.pow(height, 2) * 24.99) - weight;
loseWeightQuantity = weight - (Math.pow(height, 2) * 18.50);
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("Your weight is ideal for your height!");
sb.append("You can still gain " getFatWeightQuantity " or lose " loseWeightQuantity
"kgs without leaving normality.");
sb.append("");
sb.append("RESULT: " result ".");
}
// Little Overweight
if (BMI >= 26.50 && BMI <= 27.80) {
result = " Little Overweight";
weightDifference = weight - (Math.pow(height, 2) * 24.99);
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to lose " weightDifference " kgs to stay within normal range!");
sb.append("");
sb.append("RESULT: " result ".");
}
// Overweight
if (BMI >= 27.90 && BMI <= 31.10) {
result = "Overweight";
weightDifference = weight - (Math.pow(height, 2) * 24.99);
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to lose " weightDifference " kgs to stay within normal range!");
sb.append("");
sb.append("RESULT: " result ".");
}
// Obesity
if (BMI >= 31.20) {
result = "Obesity";
weightDifference = weight - (Math.pow(height, 2) * 24.99);
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to lose " weightDifference " kgs to stay within normal range!");
sb.append("");
sb.append("RESULT: " result ".");
}
return sb.toString();
}
// BMI calculation - FEMALE
public String BMIFemale() {
BMI = (weight / (Math.pow(height, 2)));
double weightDifference;
double getFatWeightQuantity;
double loseWeightQuantity;
StringBuilder sb = new StringBuilder();
// Underweight
if (BMI < 19.10) {
result = "Underweight";
weightDifference = (Math.pow(height, 2) * 18.50) - weight;
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to fatten " weightDifference " kgs to stay within normal range!");
sb.append("");
sb.append("RESULT: " result ".");
}
// Ideal Weight
if (BMI >= 19.10 && BMI <= 25.80) {
result = "Ideal Weight";
weightDifference = (Math.pow(height, 2) * 18.50) - weight;
getFatWeightQuantity = (Math.pow(height, 2) * 24.99) - weight;
loseWeightQuantity = weight - (Math.pow(height, 2) * 18.50);
sb.append("BMI Calculator" "\n");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("Your weight is ideal for your height!");
sb.append("You can still gain " getFatWeightQuantity " or lose " loseWeightQuantity
"kgs without leaving normality.");
sb.append("");
sb.append("RESULT: " result ".");
}
// Little Overweight
if (BMI >= 25.90 && BMI <= 27.30) {
result = "Overweight";
weightDifference = weight - (Math.pow(height, 2) * 24.99);
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to lose " weightDifference " kgs to stay within normal range!");
sb.append("");
sb.append("RESULT: " result ".");
}
// Overweight
if (BMI >= 27.40 && BMI <= 32.30) {
result = "Overweight";
weightDifference = weight - (Math.pow(height, 2) * 24.99);
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to lose " weightDifference " kgs to stay within normal range!");
sb.append("");
sb.append("RESULT: " result ".");
}
// Obesity
if (BMI >= 32.40) {
result = "Obesity";
weightDifference = weight - (Math.pow(height, 2) * 24.99);
sb.append("BMI Calculator");
sb.append("Date of diagnosis: " diagnosisDate());
sb.append("Name: " name);
sb.append("Weight: " weight);
sb.append("Height: " height);
sb.append("BMI: " BMI);
sb.append("You need to lose " weightDifference " kgs to stay within normal range!");
sb.append("");
sb.append("RESULT: " result ".");
}
return sb.toString();
}
}
And the main class (ui):
private void buttonCalculateActionPerformed(java.awt.event.ActionEvent evt) {
if (gender == 0) {
JOptionPane.showMessageDialog(null, "Choose an option (Male or Female)!");
} else {
String name = textFieldName.getText();
double weight = Double.parseDouble(textFieldWeight.getText());
double height = Double.parseDouble(textFieldHeight.getText());
String diagnosisDate = p.diagnosisDate();
person p = new person(name, weight, height, diagnosisDate, gender);
if (p.getGender() == -1) {
textAreaResult.append(p.BMIMale());
} else if (p.getGender() == 1) {
textAreaResult.append(p.BMIFemale());
}
}
}
(I'm showing only the part where I do the printing).
I can't do the code print each line of my StringBuilder, one under the other.
The result is this: Result
Do you see that the lines are printed glued to each other? How can I solve it? Print each line separately, one under the other?
Ps.: If it's missing info, you may ask to me more (i'm relatively new here...)
CodePudding user response:
Put a newline character \n at the end of every string for your append() calls, Without adding these the string is one continuous line.
CodePudding user response:
You'll need to append a line break at end of each line. Something like this
sb.append("Name: " name "\n");
CodePudding user response:
You could...
Make use of StringJoiner
StringJoiner joiner = new StringJoiner("\n");
// Underweight
if (BMI < 20.70) {
result = "UnderWeight";
weightDifference = (Math.pow(height, 2) * 18.50) - weight;
joiner.add("BMI Calculator");
joiner.add("Date of diagnosis: " diagnosisDate());
joiner.add("Name: " name);
joiner.add("Weight: " weight);
joiner.add("Height: " height);
joiner.add("BMI: " BMI);
joiner.add("You need to fatten " weightDifference " to have a weight appropriate to your height");
joiner.add("");
joiner.add("RESULT: " this.result ".");
}
