pH 水平 - 不断返回相同的答案
pH Level - Keeps Returning Same Answer
我正在制作一个程序,用户可以在其中输入 0-14 之间的数字。我目前有 2 class。一个用于计算,另一个用于主要(其中程序 运行s)。
计算
public class ph 计算 {
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;
public class 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());
}
}
}
}
我怎么会运行程序呢returns"Strongly Acidic"
感谢您的帮助。
谢谢
这是写在java
你的逻辑不对。它总是大于 stronglyAcidic,因此第一个真实的 if 测试(不是错误的 if 测试)将始终为真。解决办法,先修改那个else-if
if (myValue < stronglyAcidic || myValue > stronglyAlkaline){
return "Error";
//---Strongly Acidic 0-2
} else if(myValue > stronglyAcidic && myValue < weaklyAcidic) {
...
要点是,在这种情况下,您需要在脑海中遍历您的代码逻辑,就像您是 JVM 一样,并查看您的代码在每一行中将执行的操作。
您的 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
。
假设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
并将 return "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
它将 return "Alkaline"
.
我正在制作一个程序,用户可以在其中输入 0-14 之间的数字。我目前有 2 class。一个用于计算,另一个用于主要(其中程序 运行s)。
计算
public class ph 计算 {
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;
public class 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());
}
}
}
}
我怎么会运行程序呢returns"Strongly Acidic"
感谢您的帮助。 谢谢
这是写在java
你的逻辑不对。它总是大于 stronglyAcidic,因此第一个真实的 if 测试(不是错误的 if 测试)将始终为真。解决办法,先修改那个else-if
if (myValue < stronglyAcidic || myValue > stronglyAlkaline){
return "Error";
//---Strongly Acidic 0-2
} else if(myValue > stronglyAcidic && myValue < weaklyAcidic) {
...
要点是,在这种情况下,您需要在脑海中遍历您的代码逻辑,就像您是 JVM 一样,并查看您的代码在每一行中将执行的操作。
您的 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
。
假设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
并将 return "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
它将 return "Alkaline"
.