Java在条件中不能正确比较

时间:2017-07-12 19:27:52

标签: java

尝试使用条件而不是if语句进行双重比较。一步一步调试几次,无法弄清楚java的行星是什么-9 == 0。当你突出显示它时,它会显示为false但会增加"零"无论如何..其他的似乎来得很好。

我的意见是:

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));
    }
}

顶级方法有效,底层方法是我遇到问题的方法。

3 个答案:

答案 0 :(得分:1)

您的第一个问题是,zero++的行为并不像您认为的那样。它检索值然后递增它,因此您始终将值分配给自身。您可以验证以下打印零:

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

因此,这条线不会起作用:

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

其他一些问题已经在评论中讨论过了。

答案 1 :(得分:0)

我知道通常一个问题不应该用另一个回答,但是你想用这个做什么

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

我的意思是你为什么要分配给zero

解释

如果test为零,则减少为:

zero = zero++;

相当于:

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

没有任何改变(正如EJoshuaS所解释的那样)。

如果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

答案 2 :(得分: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;
        }

修正了,谢谢。如我所知,我意识到我分配的东西不是作业。