Java功课帮助

时间:2010-09-27 08:07:09

标签: java

我已经尝试过这项任务。但是当我输入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 :)");
     }
 }

8 个答案:

答案 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 :)");
     }