Java加倍在条件语句中无法正确比较

Java加倍在条件语句中无法正确比较,java,Java,尝试使用条件语句而不是if语句进行双重比较。一步一步地调试了好几次,但无法理解java在星球上的想法-9==0。当你突出显示它时,它会显示false,但无论如何都会增加“0”两倍。。其他的看起来都很好 我的意见是: 6 -4 3 -9 0 4 1 守则: public class HRWPlusMinus { public static void main(String[] args) { Scanner in = new Scanner(System.in); int l

尝试使用条件语句而不是if语句进行双重比较。一步一步地调试了好几次,但无法理解java在星球上的想法-9==0。当你突出显示它时,它会显示false,但无论如何都会增加“0”两倍。。其他的看起来都很好

我的意见是:

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));
    }
}
公共类hrwplus{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int length=Integer.valueOf(in.nextLine());
字符串[]输入=in.nextLine().split(“”);
solveWOF(长度,输入);
}
//用for循环求解
公共静态void solve(整数长度,字符串[]输入){
双pos=0;
双负=0;
双零=0;
for(int i=0;i0){pos++;}
如果(测试<0){neg++;}
else{zero++;}
}
System.out.printf(“%.6f\n%.6f\n%.6f”,(pos/length),(neg/length),(zero/length));
}
//用条件句求解
公共静态void solveWOF(整数长度,字符串[]输入){
双位=0,负位=0,零位=0;
对于(inti=0;i0?pos++:neg++);
}
System.out.printf(“%.6f\n%.6f\n%.6f”,(pos/length),(neg/length),(zero/length));
}
}

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

您的第一个问题是
zero++
的行为与您认为的不同。它检索值,然后将其递增,因此您总是将值分配给自身。您可以验证以下内容是否打印为零:

int zero = 0;
zero = zero++;
System.out.println(zero);
因此,这一行行不通:

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

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

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

zero = (test == 0)? zero++:
        test > 0 ? pos++: neg++;
我的意思是,为什么要将
赋值为零

解释:

如果
test
为零,这将减少到:

zero = zero++;
zero = pos++;  // or neg++ if test is < 0
这相当于:

int tmp = zero;    // internal variable
zero = zero + 1;
zero = tmp;
这并没有改变(正如EJoshuaS所解释的)

如果
test
为正(或负),则它将减少到:

zero = zero++;
zero = pos++;  // or neg++ if test is < 0
zero=pos++;//如果测试<0,则为负++
也就是说,
zero
将被设置为到目前为止的正(或负)数!这是不需要的,分配在所有情况下都是错误的

使用另一种方法
solve()
中的
if

请注意,与双打进行比较可能很棘手,请参阅:

  • double pos=0,neg=0,zero=0;
    对于(inti=0;i0)?1:0;
    阴性+=(试验<0)?1:0;
    零+=(测试==0)?1:0;
    }
    

    修复了它,谢谢。正如建议的那样,我意识到我分配了一些不是分配的内容。

    solveWOF
    方法中,您正在检查
    test==0
    ,而不是
    test<0
    。然后您检查(不是
    其他
    检查,它将始终被执行)如果
    test>0
    .Java没有错……永远不要假设JVM无法正确计算。第一个条件检查它是否为零,如果为false,第二个条件检查它是否大于零。将它作为int,但在尝试排除故障时将其更改。没有区别。还将pos、neg和zero作为int。是的,我正在计算有多少个零,“正数和负数都在我的字符串数组中。@ArcSoftware检查您的代码-您有几行代码没有执行您认为它们正在执行的操作。例如,您的一些赋值不会执行任何操作-例如,
    zero=zero++
    将完全不执行任何操作。您可以通过运行我在m中提供的代码来验证这一事实。”y答案。也尝试过零+=test==0?1:test>0?pos++:neg++;@ArcSoftware为什么要将
    pos
    添加到
    zero
    ?此外,这与我上面描述的问题类似-您在完成赋值后递增,而不是事先递增。同样,这并不是您认为它正在做的事情。@ArcSoftware the val
    someInt++
    的用法只是
    someInt
    ——也就是说,
    something++
    作为表达式的值是不变的。@EJoshuaS多次指出
    something=something++
    绝对没有任何作用。