2010-09-27 67 views
5

我有这个任务,我试过了。但是,当我进入1不应该给任何输出1> 0和1甚至没有,但我仍然得到输出:Java作业帮助

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

这将是最好用的代码格式,并从代码中删除的行号,以使其更具可读性 – 2010-09-27 08:08:39

+1

我已经编辑它,以便if语句的缩进嘛讨论代码的控制结构。哎呀,答案现在看起来有点显而易见。 – JeremyP 2010-09-27 08:20:53

+0

@ user459246:可能是类型错误。在定义类之前使用“public”。例如public class Main – Shashi 2010-09-27 08:42:19

回答

9

你别的实际上属于第二if非第一if作为压痕节目。

if(cond1) 
if(cond2) 
else // this else belongs to 2nd if not 1st if. 

是一样的:

if(cond1) { 
if(cond2) { 
} else { 
} 
} 

这是因为Java的语法说一个else属于最接近无与伦比的,如果它可向其可能属于

如果你想与第一匹配否则,如果你需要使用括号为:

if(cond1) { 
if(cond2) { 
} 
} else { 
} 
8

检查代码实际上遵循的逻辑,应该 - 缩进不会帮你带流量控制,这就是大括号{}

+3

这就是为什么即使在if子句后面只有一行代码的情况下,我总是使用大括号的原因。 – 2010-09-27 08:12:41

0

首先你应该尝试调试(使用eclipse也许) 在if(number> 0)语句包装内部if语句之后添加paranthesis。

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是错误的,因此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 :)"); 
} 
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 :)"); 
} 
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 :)"); 
      } 
     } 
    } 

} 
0

1%2 == 1所以很明显,它进入的其他分支

0

它,因为你的else语句是说如果不即使这样说:“我要的是+已经数”

招出来这样

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