我正在编写一个接收两个数字的方法,如果它们都是偶数或两个都将返回true ...如果只有一个是奇数而一个是偶数,则返回false。 它需要返回一个布尔语句,但它不工作..任何帮助表示赞赏!感谢...
public static boolean compareEvenOdd(int x, int y) {
if((x % 2 ==0) && ( y% 2==0))||((x%2 != 0) && (y%2 != 0)){
return true;
} else
return false;
}
答案 0 :(得分:7)
您可以执行以下操作(可能是最短版本):
public static boolean compareEvenOdd(int x, int y) {
return ((x + y) % 2) == 0;
}
两个奇数之和和两个偶数之和是偶数,一个奇数和一个偶数之和是奇数。因此,您添加数字并检查解决方案是否可以被2分割。
答案 1 :(得分:3)
这是使用按位运算符的绝佳机会。您可以使用带有数字&
的二进制AND(1
)运算符将整数减少到其最后的二进制数字。对于偶数,最后一位数始终为0,对于奇数,该数字始终为1。如果你的两个数字具有相同的最后二进制数字,那么它们具有相同的奇偶校验 - 也就是说,它们都是偶数或两者都是奇数。所以我会写这样的方法。
public boolean sameParity(int x, int y) {
return (x & 1) == (y & 1);
}
请注意,括号很重要,因为通常的Java操作顺序会将==
置于&
之上。
答案 2 :(得分:1)
解释:
x
和y
是奇怪的:x+y
甚至是x
和y
均为:x+y
甚至是x
是奇数,y
是奇数:x+y
是奇数x
是偶数,x
是偶数:x+y
是奇数public static boolean compareEvenOdd(int x, int y) {
return (x+y)%2==0
}
答案 3 :(得分:1)
似乎你错过了if语句中条件的另外一对括号。 这对我有用:
public static boolean compareEvenOdd(int x, int y) {
if (((x % 2 ==0) && ( y% 2==0))||((x%2 != 0) && (y%2 != 0))){
return true;
} else
return false;
}
如果这不符合您的喜好,您还要进一步说明哪些不起作用?是否在运行时抛出错误,输出错误,......?
答案 4 :(得分:0)
if (...)
形式,并且在条件周围有自己的括号。因此你就错过了。所以(删除了不需要的大括号):
public static boolean compareEvenOdd(int x, int y) {
if ((x % 2 == 0 && y % 2 == 0)
|| (x%2 != 0 && y % 2 != 0)) {
return true;
} else
return false;
}
如其他答案所示,这应该简化,
因为if+return boolean
意味着冗余地使用布尔值,而不是最全面(如== true
):
return (x % 2 == 0 && y % 2 == 0)
|| (x % 2 != 0 && y % 2 != 0);
return (x % 2) == (y % 2);
return (x - y) % 2 == 0;