尝试使用条件而不是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));
}
}
顶级方法有效,底层方法是我遇到问题的方法。
答案 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()
一样。
请注意,与双打比较可能会非常棘手,请参阅:
答案 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;
}
修正了,谢谢。如我所知,我意识到我分配的东西不是作业。