Java - 自定义整数除法函数
Java - custom integer division function
我写了一段简单的代码——ceil1
。由于重写相同代码后我的测试用例失败了 - ceil
有效。
public class Test {
public static void main(String args[]){
System.out.println(ceil(3, 2)); //getting 2
System.out.println(ceil1(3, 2)); //getting 1
}
public static int ceil(int dividend, int divisor){
int a = dividend/divisor;
int b = dividend%divisor == 0 ? 0:1;
return a+b;
}
public static int ceil1(int dividend, int divisor){
return dividend/divisor + dividend%divisor == 0 ? 0:1;
}}
我不知道这两者之间有什么区别?
可能是中间 calculation/operator 优先级导致了这种混乱。
在
return dividend/divisor + dividend%divisor == 0 ? 0:1;
增加
dividend/divisor + dividend%divisor
执行,然后将结果与0进行比较。
你想要:
return dividend/divisor + (dividend%divisor == 0 ? 0:1);
或
return dividend/divisor + (dividend%divisor == 0) ? 0:1;
为了仅将 dividend%divisor
与 0
进行比较。
加法 (+
) 运算符的优先级高于三元 (?
) 运算符。您可以用括号括起该表达式以获得您想要的行为:
public static int ceil1(int dividend, int divisor){
return dividend/divisor + (dividend%divisor == 0 ? 0:1);
}
所有 /
、+
、%
的 higher precedence 都比 ==
,因此
dividend/divisor + dividend%divisor == 0 ? 0:1
相当于
(dividend/divisor + dividend%divisor) == 0 ? 0:1
所以你总是会从中得到 0 或 1。
不管优先级问题如何,您的代码都会产生不正确的答案。
例如,ceil(-5, 3)
returns 0,而 Math,ceil(-5.0 / 3.0)
returns -1("un-ceiled" 值为 -1.666667
)。
如果您使用更简单的方法,您将得到正确答案:
(dividend + divisor - 1) / divisor
我写了一段简单的代码——ceil1
。由于重写相同代码后我的测试用例失败了 - ceil
有效。
public class Test {
public static void main(String args[]){
System.out.println(ceil(3, 2)); //getting 2
System.out.println(ceil1(3, 2)); //getting 1
}
public static int ceil(int dividend, int divisor){
int a = dividend/divisor;
int b = dividend%divisor == 0 ? 0:1;
return a+b;
}
public static int ceil1(int dividend, int divisor){
return dividend/divisor + dividend%divisor == 0 ? 0:1;
}}
我不知道这两者之间有什么区别? 可能是中间 calculation/operator 优先级导致了这种混乱。
在
return dividend/divisor + dividend%divisor == 0 ? 0:1;
增加
dividend/divisor + dividend%divisor
执行,然后将结果与0进行比较。
你想要:
return dividend/divisor + (dividend%divisor == 0 ? 0:1);
或
return dividend/divisor + (dividend%divisor == 0) ? 0:1;
为了仅将 dividend%divisor
与 0
进行比较。
加法 (+
) 运算符的优先级高于三元 (?
) 运算符。您可以用括号括起该表达式以获得您想要的行为:
public static int ceil1(int dividend, int divisor){
return dividend/divisor + (dividend%divisor == 0 ? 0:1);
}
所有 /
、+
、%
的 higher precedence 都比 ==
,因此
dividend/divisor + dividend%divisor == 0 ? 0:1
相当于
(dividend/divisor + dividend%divisor) == 0 ? 0:1
所以你总是会从中得到 0 或 1。
不管优先级问题如何,您的代码都会产生不正确的答案。
例如,ceil(-5, 3)
returns 0,而 Math,ceil(-5.0 / 3.0)
returns -1("un-ceiled" 值为 -1.666667
)。
如果您使用更简单的方法,您将得到正确答案:
(dividend + divisor - 1) / divisor