我正在開發一個計算 BMI 的系統。我正在使用 NetBeans(我是這個 IDE 的新手)
但是我陷入了困境......我想用換行符在 textArea 上列印 StringBuilder 的值,但我做不到。
代碼(個人類):
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();
}
}
和主類(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());
}
}
}
(我只展示了我列印的部分)。
我不能讓代碼列印我的 StringBuilder 的每一行,一個在另一個之下。
結果是這樣的: 結果
你看到線條是相互粘在一起的嗎?我該如何解決?分別列印每一行,一個在另一個下面?
Ps.:如果它缺少資訊,你可以問我更多(我在這里相對較新......)
uj5u.com熱心網友回復:
你可以...
利用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 ".");
}
你可以...
將您的關注點與格式分離Person,BMI這使得過度解決方案更加靈活,例如,您可以有一個長格式,其中包括所有換行符,以及表格格式或簡短的“你”重新變胖”格式??
讓我們從減少職責重疊開始
人
人物件只處理與人有關的細節???♂?
public class Person {
enum Gender {
MALE, FEMALE
}
private String name;
private Double weight;
private Double height;
private Gender gender;
public Person() {
}
public Person(Gender gender) {
this.gender = gender;
}
public Person(String name, Double weight, Double height, Gender gender) {
this.name = name;
this.weight = weight;
this.height = height;
this.gender = gender;
}
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 Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
體重指數計算...
然后你可以隔離(并簡化)計算......
public class BMI {
enum Result {
UNDER_WEIGHT, IDEAL_WEIGHT, LITTLE_OVER_WEIGHT, OVER_WEIGHT, OBESE;
public String toString() {
switch (this) {
case UNDER_WEIGHT:
return "Under weight";
case IDEAL_WEIGHT:
return "Ideal";
case LITTLE_OVER_WEIGHT:
return "Little over weight";
case OVER_WEIGHT:
return "Over weight";
case OBESE:
return "Obese";
}
return "unknown";
}
}
private Person person;
private double value;
private Result result;
private LocalDateTime diagnosisDate;
double weightDifference;
Double fatWeightQuantity = null;
Double loseWeightQuantity = null;
public BMI(Person person) {
this.person = person;
diagnosisDate = LocalDateTime.now();
value = (person.getWeight() / (Math.pow(person.getHeight(), 2)));
switch (person.getGender()) {
case MALE:
if (value < 20.70) {
result = Result.UNDER_WEIGHT;
weightDifference = weightDifference(18.5);
} else if (value <= 26.40) {
result = Result.IDEAL_WEIGHT;
weightDifference = weightDifference(18.5);
fatWeightQuantity = fatWeightQuantity(24.9);
loseWeightQuantity = loseWeightQuantity(18.5);
} else if (value <= 27.80) {
result = Result.LITTLE_OVER_WEIGHT;
weightDifference = weightDifference(24.99);
} else if (value <= 31.10) {
weightDifference = weightDifference(24.99);
result = Result.OVER_WEIGHT;
} else {
result = Result.OBESE;
weightDifference = weightDifference(24.99);
}
case FEMALE:
if (value < 19.10) {
result = Result.UNDER_WEIGHT;
weightDifference = (Math.pow(person.getHeight(), 2) * 18.50) - person.getWeight();
} else if (value <= 25.80) {
result = Result.IDEAL_WEIGHT;
weightDifference = (Math.pow(person.getHeight(), 2) * 18.50) - person.getWeight();
fatWeightQuantity = fatWeightQuantity(24.9);
loseWeightQuantity = loseWeightQuantity(18.5);
} else if (value <= 27.30) {
result = Result.LITTLE_OVER_WEIGHT;
weightDifference = weightDifference(24.99);
} else if (value <= 32.30) {
weightDifference = weightDifference(24.99);
result = Result.OVER_WEIGHT;
} else {
result = Result.OBESE;
weightDifference = weightDifference(24.99);
}
break;
}
}
public double getValue() {
return value;
}
public Person getPerson() {
return person;
}
public Result getResult() {
return result;
}
public double getWeightDifference() {
return weightDifference;
}
public Double getFatWeightQuantity() {
return fatWeightQuantity;
}
public Double getLoseWeightQuantity() {
return loseWeightQuantity;
}
protected double heightByFactor(double factor) {
return Math.pow(getPerson().getHeight(), 2) * factor;
}
protected double weightDifference(double factor) {
return heightByFactor(factor) - getPerson().getWeight();
}
protected double fatWeightQuantity(double factor) {
return heightByFactor(factor) - getPerson().getWeight();
}
protected double loseWeightQuantity(double factor) {
return getPerson().getWeight() - heightByFactor(factor);
}
public LocalDateTime getDiagnosisDate() {
return diagnosisDate;
}
}
格式化
現在,我在這里只完成了長格式,但你可以看到它可以去哪里以及它可以提供的靈活性。
public class BMIFormatter {
public static String longFormat(BMI bmi) {
StringJoiner joiner = new StringJoiner("\n");
joiner.add("BMI Calculator");
joiner.add("Date of diagnosis " DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(bmi.getDiagnosisDate()));
joiner.add("Name: " bmi.getPerson().getName());
joiner.add("Weight: " bmi.getPerson().getWeight());
joiner.add("Height: " bmi.getPerson().getHeight());
joiner.add("BMI: " NumberFormat.getNumberInstance().format(bmi.getValue()));
switch (bmi.getResult()) {
case UNDER_WEIGHT:
joiner.add("You need to fatten " NumberFormat.getNumberInstance().format(bmi.getWeightDifference()) " kgs to stay within normal range!");
break;
case IDEAL_WEIGHT:
joiner.add("Your weight is ideal for your height!");
joiner.add("You can still gain " NumberFormat.getNumberInstance().format(bmi.getFatWeightQuantity()) " or lose " NumberFormat.getNumberInstance().format(bmi.getLoseWeightQuantity()) "kgs without leaving normality.");
break;
case LITTLE_OVER_WEIGHT:
joiner.add("You need to lose" NumberFormat.getNumberInstance().format(bmi.getWeightDifference()) " kgs to stay within normal range!");
break;
case OVER_WEIGHT:
joiner.add("You need to lose" NumberFormat.getNumberInstance().format(bmi.getWeightDifference()) " kgs to stay within normal range!");
break;
case OBESE:
joiner.add("You need to lose" NumberFormat.getNumberInstance().format(bmi.getWeightDifference()) " kgs to stay within normal range!");
break;
}
joiner.add("");
joiner.add("RESULT: " bmi.result.toString() ".");
return joiner.toString();
}
}
然后你可以使用類似...
Person person = new Person("Bob", 65.5, 1.8, Person.Gender.MALE);
BMI bmi = new BMI(person);
System.out.println(BMIFormatter.longFormat(bmi));
哪個列印
BMI Calculator
Date of diagnosis 2022-01-24T15:15:40.685079
Name: Bob
Weight: 65.5
Height: 1.8
BMI: 20.216
Your weight is ideal for your height!
You can still gain 15.176 or lose 5.56kgs without leaving normality.
nb:檢查計算,我努力確保它們是正確的,但我沒有你使用的演算法 結果:理想。
uj5u.com熱心網友回復:
\n為您的呼叫在每個字串的末尾添加一個換行符append() ,如果不添加這些字串,則該字串是一個連續的行。
uj5u.com熱心網友回復:
您需要在每行末尾附加一個換行符。像這樣的東西
sb.append("Name: " name "\n");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/420483.html
標籤:
