非常业余的编码员, 我正在制作一个简单的程序来判断一个数字是正数,负数,奇数还是偶数。到目前为止,除了积极的奇数之外,一切都有效,但是无法弄清楚为什么?
另外,我将如何循环呢?我会使用for或while循环吗?
谢谢
package weekeleven;
import java.util.Scanner;
public class week111 {
static int number;
static String pE;
static String pO;
static String nE;
static String nO;
static String eR;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
number = -input.nextInt();
pE = ("Positive Even");
pO = ("Positive Odd");
nE = ("Negative Even");
nO = ("Negative Odd");
eR = ("Error");
Object x = null;
x=getSignAndParity(x);
System.out.println(x);
}
public static String getSignAndParity(Object x) {
if ((number > 0) && (number % 2 == 0)) { //negative and even
return nE;
} else if((number < 0) && (number % 2 == 1)) { // positive and odd
return pO;
} else if((number < 0) && (number % 2 == 0)) { // positive and even
return pE;
} else if((number > 0) && (number % 2 == 1)) { // negative and odd
return nO;
} else { // other cases
return eR;
}
}
}
答案 0 :(得分:1)
您的代码存在多个问题,导致其无法按预期工作。
1)您在负数上使用mod 2来检查负数是偶数还是奇数。但那不行。例如,-7 mod 2 = -1
(既不是1也不是0)
2)您正在否定用户的输入:
number = -input.nextInt();
你翻了标记>
,<
这是不必要的
3)您不应将int
输入作为对象传递。你可以简单地说:
public static String getSignAndParity(int x)
删除所有多余的和不必要的声明和代码,你可以这样做:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int number = input.nextInt();
System.out.println(getSignAndParity(number));
}
public static String getSignAndParity(int num) {
if(num == 0)
return "Error";
String sign = num>0?"Positive":"Negative";
String parity = Math.abs(num)%2==0?"Even":"Odd";
return sign + " " + parity;
}
答案 1 :(得分:0)
随此改变
else if((number > 0) && (number % 2 == 1)) { // positive and odd
return pO;
}
对于正奇数和循环,您需要现有代码或具有从扫描仪获取的条件,然后关闭扫描仪。 scanner:https://www.javatpoint.com/Scanner-class
答案 2 :(得分:0)
你必须像这样改变积极的奇怪:
else if((number < 0) && (number % 2 == -1)) { // positive and odd}