我已经尝试过这项任务。但是当我输入1时,它不应该给出任何输出,因为1是> 0和1不是偶数,但我仍然得到输出:
Enter a +ve number
1
You entered 1
I'd asked for a +ve number :)
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a +ve number");
int number = input.nextInt();
System.out.println("You entered "+number);
if(number > 0)
if(number %2 == 0)
System.out.println("Number"+number+" is even and +ve");
else
System.out.println("I'd asked for a +ve number :)");
}
}
答案 0 :(得分:9)
您的其他内容实际上属于第二 if
而不是第一个if
,因为缩进显示。
if(cond1)
if(cond2)
else // this else belongs to 2nd if not 1st if.
与:
相同if(cond1) {
if(cond2) {
} else {
}
}
这是因为Java语法说 一个else属于最接近的不匹配项,如果它可能属于 。
如果您需要将括号与first匹配,则需要使用括号:
if(cond1) {
if(cond2) {
}
} else {
}
答案 1 :(得分:8)
检查代码是否真正遵循它应该遵循的逻辑 - 缩进对流控制没有帮助,这就是大括号{}
的用途。
答案 2 :(得分:5)
这可能是因为您的ifs
被解释为:
if(number > 0)
if(number %2 == 0)
System.out.println("Number"+number+" is even and +ve");
else
System.out.println("I'd asked for a +ve number :)");
计算机应该如何知道你的意思?您需要使用括号使其明确:
if(number > 0) {
if(number %2 == 0) {
System.out.println("Number"+number+" is even and +ve");
}
} else {
System.out.println("I'd asked for a +ve number :)");
}
答案 3 :(得分:4)
当我输入1时,我得到以下输出:
Enter a +ve number
1
You entered 1
I'd asked for a +ve number :)
首次检查时这是合理的
if (number > 0)
对于number == 1
是正确的,然后检查
if (number % 2 == 0)
对number == 1
为false,因此采用了else分支:
System.out.println("I'd asked for a +ve number :)")
您的代码应该类似于:
Scanner input = new Scanner(System.in);
System.out.println("Enter a +ve number");
int number = input.nextInt();
System.out.println("You entered " + number);
if (number > 0) {
if (number % 2 == 0)
System.out.println("Number" + number + " is even and +ve");
} else {
System.out.println("I'd asked for a +ve number :)");
}
答案 4 :(得分:0)
首先你应该尝试调试(也许使用eclipse) 在if(number> 0)语句之后添加括号以包装内部if语句。
答案 5 :(得分:0)
我把你的代码扔进Netbeans并让它自动格式化以便于阅读。这是你想要的逻辑流吗?因为这是编译器看到if语句对齐/嵌套的方式。
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter a +ve number");
int number = input.nextInt();
System.out.println("You entered " + number);
if (number > 0)
{
if (number % 2 == 0)
{
System.out.println("Number" + number + " is even and +ve");
}
else
{
System.out.println("I'd asked for a +ve number :)");
}
}
}
}
答案 6 :(得分:0)
1%2 == 1所以很明显它进入了else分支
答案 7 :(得分:0)
因为你的其他声明在说它是否甚至没有说“我要求+ ve号”
将其移出if语句,如此
if(number > 0)
{
if(number %2 == 0)
{
System.out.println("Number"+number+" is even and +ve");
}
}
else
{
System.out.println("I'd asked for a +ve number :)");
}