-3

私はコースワークのために作っているダイエッ​​トプログラミング用の BMI 計算機を作っています。もともと、別のクラスから変数を取得するために、いくつかの変数をpublic staticにしていました。私のBMI計算機はこの方法でうまくいきました。

次に、(より多くのマークを取得するために) get メソッドを使用できることがわかりました。そのため、以前の変数をプライベートに変更し、 get メソッドを使用しました。しかし、このプログラムを実行すると、プログラムが BMI を保持する変数を出力するときに NaN が返されます。これは以前には起こりませんでした!

誰でも助けることができますか?

import java.util.Scanner;

public class Weight {
private Scanner input;
private String readInput;
private String userWeightIsPounds;
private String userWeightIsStones;

private Scanner input2;
public static double userWeight;

public Weight(){
    userWeightIsPounds = ("Pounds");
    userWeightIsStones = ("Stones");        
}

public void findOutUserWeightMessage(){
    System.out.println("Firstly Do you weigh yourself in pounds or stones?");
}

public void findOutUserWeight(){
    input = new Scanner (System.in);
    readInput = input.nextLine();
    if(readInput.equals(userWeightIsPounds)){
        System.out.println("Ok then, enter your weight in pounds please.");
    }
    if(readInput.equals(userWeightIsStones)){
        System.out.println("Ok enter your weight in stones please.");
    }   

    input2 = new Scanner (System.in);
    userWeight = input2.nextFloat();
    if (userWeight > 20){
        System.out.println("You've enetered your weight as " + userWeight + " lbs. I'll save that information for later.");
    }else{
        userWeight = userWeight * 14;
        System.out.println("I've converted your weight into pounds for you. You weigh " + userWeight + " lbs. I'll save that information for later.");  
    }
}

public double static getUserWeight(){
    return userWeight;
}

}

そして、計算を行うクラスのコードが来ます。変数で何が起こっているのかを調べようとしていた println の一部を無視します。

public class BMI {

private double userHeightSqaured;
private double bmiMutiplier;
private double weightDivideHeight;
private double userBmi;
private double userWeightBmi;
private double userHeightBmi;



BMI(){
    bmiMutiplier = 703;
    userWeightBmi = Weight.getUserWeight();
    userHeightBmi = Height.getUserHeight();
}

public void startUpBmiMessage(){
    System.out.print("Lets start with your BMI then shall we? ");
}

public void calculateUserBmi(){
    System.out.println("userWeightBmi is " + userWeightBmi);
    System.out.println("userWeightBmi is " + userHeightSqaured);

    userHeightSqaured = userHeightBmi * userHeightBmi;
    System.out.println("userHeightSqaured is " + userHeightSqaured);
    weightDivideHeight = userWeightBmi/userHeightSqaured;
    System.out.println("weightDivideHeight is " + weightDivideHeight);

    userBmi = weightDivideHeight * bmiMutiplier;
    System.out.println("weightDivideHeight is " + weightDivideHeight);
    System.out.println("bmiMutiplier is " + bmiMutiplier);


}   

public void calculateUserBmiMessage(){

    System.out.println("Your bmi is " + userBmi);

}

}

4

2 に答える 2

0

NaN の理由は、次のステートメントです。

    weightDivideHeight = userWeightBmi/userHeightSqaured;

ゼロをゼロで割ります。つまりuserWeightBmi、 とuserHeightSqauredはその時点で両方ともゼロでした。

static根本的な問題は、と インスタンス変数の違いについて理解していないことにあるようです。そして、2 種類の変数を使用する必要がある場合と使用しない場合があります。

于 2012-12-19T01:51:38.390 に答える
0

いくつかの計算を実行する Java プログラムを作成しようとしているように聞こえますが、計算の結果は次のとおりです。Java では、NaN とはどういう意味ですか? というNaN質問を参照できます。に関するいくつかの情報については。NaN

コードを見ずに問題を解決し、以前と同じ入力で計算が正常に機能したと仮定すると、public static変数からゲッターを使用したプライベート変数への切り替えにより、おそらく変数の一部が初期化されていないため、それらの値はデフォルトで 0 になります。 0 による除算は、 の一般的な原因ですNaN

于 2012-12-19T01:06:34.953 に答える