二重比較のif文の代わりに条件文を使用しようとしています。いくつかの段階で段階的にデバッグし、どのような惑星のJavaが-9 == 0と考えるのか分からない。あなたがそれを強調表示すると、それは偽と言われますが、とにかく "ゼロ"の倍を増やします。他のものはうまく来るようです。条件付きでJavaが倍精度に倍精度化されない
私の入力は次のとおりです。
6
-4 3 -9 0 4 1
コード:
public class HRWPlusMinus {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int length = Integer.valueOf(in.nextLine());
String[] input = in.nextLine().split(" ");
solveWOF(length, input);
}
//solve with for loop
public static void solve(int length, String[] input) {
double pos = 0;
double neg = 0;
double zero = 0;
for (int i = 0; i < length; i++){
int test = Integer.valueOf(input[i]);
if (test > 0) {pos++;}
else if (test < 0) {neg++;}
else {zero++;}
}
System.out.printf("%.6f \n%.6f \n%.6f", (pos/length), (neg/length), (zero/length));
}
//solve with conditionals
public static void solveWOF(Integer length, String[] input) {
double pos = 0, neg = 0, zero = 0;
for (int i=0; i<length; i++) {
Double test = Double.valueOf(input[i]);
zero = (test == 0)? zero++:
test > 0 ? pos++: neg++;
}
System.out.printf("%.6f \n%.6f \n%.6f", (pos/length), (neg/length), (zero/length));
}
}
トップメソッドは動作しますが、下の1は私が問題を抱えているものです。
'solveWOF'メソッドでは' test == 0'で 'test <0'ではないかどうかチェックしています。 'test> 0'の場合はチェックします(' else'チェックではなく、常に終了します)。 – billie
Javaは間違っていません....JVMが正しく計算できないとは決して考えません。 – JFPicard
最初の条件チェックで、ゼロの場合はfalse、それよりも大きい場合は2番目のチェックが行われます。 – ArcSoftware