我正在制作一个程序,用户可以在 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编写的
答案 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"
。