2017-07-12 18 views
0

二重比較の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は私が問題を抱えているものです。

+0

'solveWOF'メソッドでは' test == 0'で 'test <0'ではないかどうかチェックしています。 'test> 0'の場合はチェックします(' else'チェックではなく、常に終了します)。 – billie

+1

Javaは間違っていません....JVMが正しく計算できないとは決して考えません。 – JFPicard

+0

最初の条件チェックで、ゼロの場合はfalse、それよりも大きい場合は2番目のチェックが行われます。 – ArcSoftware

答えて

0
私は、通常の質問は別で答えられるべきでないことを知っている、しかし、あなたは私がなぜあなたは zeroに割り当てる意味この

zero = (test == 0)? zero++: 
     test > 0 ? pos++: neg++; 

でやろうとしている

を説明する:

testがゼロである場合、これはに減少:

zero = zero++; 

に相当する:(EJoshuaSにより説明したように)何も変化しないこと

int tmp = zero; // internal variable 
zero = zero + 1; 
zero = tmp; 

testがにそれが減少し、正(または負)の場合:ある

zero = pos++; // or neg++ if test is < 0 

zeroが陽性(または陰性)、これまでの数に設定されます!それが望ましくない場合、割り当てはすべての場合に間違っています!

他の方法のようにifを使用してください。solve()ありがとう、

それを修正
  1. What's wrong with using == to compare floats in Java?
  2. comparing float/double values using == operator
1

あなたの最初の問題は、zero++は、それがどう考えられるか振る舞いません。値を取得してからインクリメントするので、常に自分自身に値を割り当てています。

int zero = 0; 
zero = zero++; 
System.out.println(zero); 

したがって、この行は動作しません:他の問題のいくつかはすでにコメントで議論されている

zero = (test == 0)? zero++: 
     test > 0 ? pos++: neg++; 

次のプリントがゼロかどうかを確認できます。

+0

はい、文字列配列内にゼロ、陽性、および負数がいくつあるかを調べています。 – ArcSoftware

+1

@ArcSoftwareあなたのコードを検査してください - あなたはあなたが何をしていると思っているのか分からないいくつかの行があります。たとえば、あなたの課題のいくつかは何もしません。 'zero = zero ++'は文字通り全く何もしません。私の答えで提供したコードを実行することで、その事実を確認することができます。 – EJoshuaS

+0

試してみましたか? ゼロ+ =テスト== 0? 1:テスト> 0? pos ++:neg ++; – ArcSoftware

0
double pos = 0, neg = 0, zero = 0; 
     for (int i=0; i<length; i++) { 
      Double test = Double.valueOf(input[i]); 
      pos += (test > 0) ? 1:0; 
      neg += (test < 0) ? 1:0; 
      zero += (test == 0) ? 1:0; 
     } 

を:

が見る、ダブルスとの比較は難しいことができることに注意してください。提案したように、私は割り当てられていないものを割り当てることに気付きました。