2010-09-27 108 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 :)"); 
    }