2012-10-25 78 views
0

我再次遇到與我的程序相同的問題。某一範圍內沒有輸出

這次的問題是程序在59和20之間不輸出任何內容。程序只是終止。據我所知,所有的if語句格式的方式相同,但也許我只是需要一些關於它的新的眼睛,因爲我的大腦被擋住了錯誤

下面的代碼:

import java.util.Scanner; 

public class LazyDaysCamp 
{ 
    public static void main (String[] args) 
    { 
     int temp; 
     Scanner scan = new Scanner(System.in); 

     System.out.println ("What's the current temperature?"); 
     temp = scan.nextInt(); 
     if (temp > 95 || temp < 20) 
     { 
      System.out.println ("Visit our shops!"); 
     } else if (temp <= 95) 
      if (temp >= 80) 
      { 
       System.out.println ("It's good weather for swimming"); 
      } else if (temp >=60) 
       if (temp < 80) 
       { 
        System.out.println ("It's good weather for tennis"); 
       } else if (temp >= 40) 
        if (temp < 60) 
        { 
         System.out.println ("It's good weather for golf"); 
        } else if (temp >= 20) 
         if (temp < 40) 
         { 
          System.out.println ("It's good weather for skiing"); 
         } 
        } 
       }                                                                 
      } 
     } 
    } 
} 

我知道if語句有點過分,但有人指出,但我需要這樣做(級聯if)。否則,我會使用邏輯運算符。

下面是輸出:

----jGRASP exec: java LazyDaysCamp 

What's the current temperature? 
100 
Visit our shops! 

----jGRASP: operation complete. 

----jGRASP exec: java LazyDaysCamp 

What's the current temperature? 
85 
It's good weather for swimming 

----jGRASP: operation complete. 

----jGRASP exec: java LazyDaysCamp 

What's the current temperature? 
70 
It's good weather for tennis 

----jGRASP: operation complete. 

----jGRASP exec: java LazyDaysCamp 

What's the current temperature? 
50 

----jGRASP: operation complete. 

----jGRASP exec: java LazyDaysCamp 

What's the current temperature? 
30 

----jGRASP: operation complete. 

----jGRASP exec: java LazyDaysCamp 

What's the current temperature? 
15 
Visit our shops! 

----jGRASP: operation complete. 

回答

1

請注意,您的幾個if語句是不必要的。如果溫度是>= 80,那麼當您檢查它是< 80時,它不能是除< 80之外的任何其他值。這是多次完成的。

問題是您的else-if語句被放置爲替代這些不必要的if語句,始終爲爲真。結果,else-if條件從未被評估過。

if (temp < 80) // this is unnecessary because it's previously checked, and is always true 
{ 
    System.out.println ("It's good weather for tennis"); 
} 
else if (temp >= 40) // this is attached to the true-if and therefore isn't evaluated 
1

一些你的if語句沒有括號來表示他們的條件塊。這使得很難確定你實際嘗試完成的是什麼。在Java中,如果下一行包含應該執行的語句,則可以在if語句之後省略大括號。情況並非如此,上述公約並非最佳做法。我建議在整個條件語句中使用大括號來表示它們的分離。

+0

這不一定是答案,但是再一次,OP並沒有真正清楚問題究竟是什麼。 – Vulcan

+1

@Vulcan我會考慮答案的這一部分A.如果有大括號,他們和我們就會更容易找出他們正在嘗試做的事情。如果實施該建議,解決方案的第二部分B部分可能是顯而易見的。 –

+0

我同意你的看法(我更喜歡括號),但這裏的問題實際上是簡單的物流,並且位於OP使用括號的區域內。 – Vulcan

2

你的問題在於else語句中。例如,當你嘗試「50」

else if (temp >=60) 

這種說法返回false,甚至不轉到下面的if語句,這意味着它有沒有下面這句話的其他人,以獲得正確的機會結果。

我建議只刪除所有其他的,只使用if語句。

+1

此外,不要使用連續的if語句,請使用&&語句。 –

+0

歡迎來到SO! 刪除所有else語句並用if語句替換它們不完全相同。 –

+1

@KirkBackus歡迎來到Stackoverflow並感謝您的帖子。關於您的評論:您實際上可以編輯您的答案,並在其中包含關於'&&'語句的評論。 – jogojapan