pH值 - 保持相同的答案

时间:2015-04-22 20:21:23

标签: java class while-loop boolean

我正在制作一个程序,用户可以在 0-14 之间输入一个数字。我目前有2节课。一个用于计算和另一个是主要的(程序运行的地方)。

计算

公共课程计算{

public static final double MIN = -0.999;
public static final double stronglyAcidic =0;
public static final double acidic =2.1;
public static final double weaklyAcidic =4.1;
public static final double nearNeutralAcid =6.1;
public static final double Neutral =7;
public static final double nearNeutralBase=7.01;
public static final double weaklyAlkaline=8.1;
public static final double alkaline=10.1;
public static final double stronglyAlkaline=12.1;
public static final double MAX = 12.11;

//finds id double is acceptable

public phcalculations(double pH){
    //---Not valid pH
    if (pH < MIN || pH > MAX){
    System.out.println(pH +" is not a vaild pH");
    } else{
        myValue = pH;
    }


}




//method for finding pH

public String label(){
    //---Not valid pH
    if (myValue < stronglyAcidic || myValue > stronglyAlkaline){
        return "Error";
    //---Strongly Acidic 0-2
    } else if(myValue>stronglyAcidic){
        return "Strongly Acidic";
    //---Acidic 2.1-4.0 
    } else if (myValue > acidic ){
        return "Acidic";
    //---Weakly Acidic 4.1-6.0
    } else if (myValue> weaklyAcidic){
        return "Weakly Acidic"; 
    //---Near neutral   6.1-6.99
    } else if (myValue >nearNeutralAcid){
        return "Near Neutral";
    //--Neutral 7
    } else if (myValue == Neutral){
        return "Neutral";
    //---Near Neutral 7.01 -8
    } else if (myValue > nearNeutralBase){
        return "Near Neutral";
    //---Weakly Acidic 8.1-10
    } else if (myValue> weaklyAlkaline){
        return "Weakly Acidic";
    //---Alkaline 10.1-12.0
    } else if (myValue > alkaline){
        return "Alkaline";
    //---Strongly Acidic 12.1-14
    } else if (myValue>stronglyAlkaline){
        return "strongly Alkaline";
    } else {
        return "error";
    }


}


private double myValue;

}

主要

import java.util.Scanner;

公共班级pHMain {

public static void main(String[] args) {

    Scanner kbd = new Scanner(System.in);
    boolean done =false;
    while (!done){
        System.out.println("Enter pH: ");
        double pHInput = kbd.nextDouble();
        if(pHInput < phcalculations.MIN ){
            done =true;
        } else{
            phcalculations ph = new phcalculations(pHInput);
            System.out.println("pH level is ---> " + ph.label());
        }
    }







}

}

为什么我什么时候运行它返回的程序&#34;强烈酸性&#34;

帮助表示赞赏。 感谢

这是用java编写的

3 个答案:

答案 0 :(得分:1)

您的label方法的逻辑不正确。你的第二个条件:

} else if(myValue>stronglyAcidic){

涵盖您剩下的所有可能值。您需要测试两侧有界的特定范围,而不是您所拥有的单侧范围。尝试

} else if(myValue > stronglyAcidic && myValue < acidic){

除了最后一个条件之外的其他条件需要类似的替换,例如

} else if (myValue > acidic && myValue < weaklyAcidic){

此外,由于您的stronglyAlkaline值不是考虑的最大值,因此您的第一个条件将错过所有"Strongly alkaline"值。尝试:

if (myValue < stronglyAcidic || myValue > MAX){

...根据您的要求,MAX应该是14而不是12.11

答案 1 :(得分:0)

你的逻辑是关闭的。它总是比strongAcidic大,所以第一个真正的if测试(不是测试时的错误)将永远为真。解决方案,首先修改其他 - 如果

if (myValue < stronglyAcidic || myValue > stronglyAlkaline){
    return "Error";
//---Strongly Acidic 0-2
} else if(myValue > stronglyAcidic && myValue < weaklyAcidic) {
   ...

回顾一点是,在这种情况下,您需要精神上处理代码逻辑,就像您是JVM一样,并查看您的代码将在每一行中执行的操作。

答案 2 :(得分:0)

假设myValue == 8。当你这样做时:

} else if(myValue>stronglyAcidic){
    return "Strongly Acidic";
//---Acidic 2.1-4.0 
} else if (myValue > acidic ){
    return "Acidic";
//---Weakly Acidic 4.1-6.0
} // etc.

第一个if将检查8 > 0是否会返回"Strongly Acidic"。因此,它永远不会检查第二个或任何其他条件。

要解决此问题,您可以颠倒条件的顺序,从更具体,更高的值,到更低的特定值,更低的值进行检查:

} else if (myValue > stronglyAlkaline) {
    // this should be the first condition
    return "strongly Alkaline";
} else if (myValue > alkaline) {
    // this should be the second condition
    return "Alkaline";
} // and so on until

...

} else if(myValue > stronglyAcidic) {
    // and the last condition
    return "Strongly Acidic";
}

因此,例如,如果myValue == 11,第一个条件(11 > 12.1)将为false,但第二个条件(11 > 10.1)将为true它会返回"Alkaline"