当我尝试运行此代码时,它不会让我使用" bmi"。我试图制作一个简单的身体质量指数计算器,但我不明白为什么它不会起作用。如果你能正确地重写代码,它会帮助我更好地学习。
import java.util.Scanner;
public class Bmi {
int weight;
int height;
int bmi = weight /(height*height) * 703;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter weight: ");
int weight = input.nextInt();
System.out.print("Enter height: ");
int height = input.nextInt();
System.out.println(bmi);
}
}
答案 0 :(得分:4)
您正在尝试在静态上下文中使用非静态成员。
这里你真的不需要任何实例/静态变量。只需使用局部变量。
import java.util.Scanner;
public class Bmi {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter weight: ");
int weight = input.nextInt();
System.out.print("Enter height: ");
int height = input.nextInt();
int bmi = weight /(height*height) * 703;
System.out.println(bmi);
}
}
虽然在现实世界中没有发生,但当你的身高超过体重时,你会因为整数分裂而最终为零。更好的是你将它们改为双打。阅读Why is the result of 1/3 == 0?
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter weight: ");
double weight = input.nextInt();
System.out.print("Enter height: ");
double height = input.nextInt();
double bmi = weight / (height * height) * 703;
System.out.println(bmi);
}
最后
int bmi = weight /(height*height) * 703;
该陈述不会跟踪重量和身高的值。每次更改时都需要重新评估。
答案 1 :(得分:1)
您绝不应将worker
和user
代码合并到同一个类中。
最好为计算器创建一个单独的类BmiCalculator
,并定义一个static
方法来计算bmi说calculateBmi
。静态,因为它只是依赖于它需要的输入而没有别的。
然后直接在CallerClass
请参阅以下代码:
import java.util.Scanner;
class BmiCalculator {
public static double calculateBmi(double weight, double height){
return weight /(height*height) * 703;
}
}
public class CallerClass{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter weight: ");
double weight = input.nextInt();
System.out.print("Enter height: ");
double height = input.nextInt();
System.out.println(BmiCalculator.calculateBmi(weight,height));
}
}
答案 2 :(得分:0)
这是因为您尝试从静态上下文访问实例上下文。最简单的解决方法是为您添加静态修改器 字段并从bmi字段赋值中删除bmi计算,因为在加载类时会初始化所有静态。更简洁 编写此代码的方法是:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter weight: ");
int weight = input.nextInt();
System.out.print("Enter height: ");
int height = input.nextInt();
Bmi bmi = new Bmi(weight, height); //create new bmi instance
System.out.println(bmi.value()); // get it's value
System.out.println(bmi); // calls toString() method (object text representation)
//that we already override in Bmi class
}
}
我们将Bmi计算与用户输入分离,并创建单独的类,现在Bmi类对用户输入一无所知,这很好,因为这样我们增加了内聚力并减少了Main和Bmi类中的耦合。 它有助于在不同项目中编写代码重用,并简化mantain工作。有关详细信息,请参阅https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)。
public class Bmi { //place to separate file with name Bmi.java
private int weight;
private int height;
public Bmi(int weight, int height) {
this.weight = weight;
this.height = height;
}
/**
returns a bmi value
*/
public int value() {
return weight / (height * height) * 703;
}
public String toString() {
return value();
}
}