2013-03-07 29 views
0

這是一個奇怪的問題,我知道,但我需要編寫一個基本上有3個問題的程序[(a OR b)AND c]使用if。我的老師希望我們向用戶詢問動物是否黑色並回答y或n。如果n詢問它是否是白色並回答y或n。如果任何一個陳述是真實的,那麼詢問它是否友好,回答y或n。如果它是黑色或白色,並且友好,那麼我們會收到一條消息,表示它可以與我一起回家,否則我們會收到一條抱歉的消息。我的問題是,她說我們只能使用一個,並且必須使用compareToIgnoreCase和一個函數。我可以用if來做到這一點,但我甚至無法弄清楚如何開始不使用if。請幫助,我已Google,閱讀所有有希望的聲音的所有答案,並且我一直在尋找指示我如何使用if語句。老師只想要3個[(a或b)和c]問題

+0

不知道我是否完全理解,但是如果最後只能保存布爾值和單個值嗎?像:'boolean flag = input.equals(「black」);'那樣的東西。 – Ken 2013-03-07 18:05:58

回答

0

可以

你不使用實際的 「如果」 操作者,而是一個if/else語句嘗試使用三元運算符(http://en.wikipedia.org/wiki/%3F:)。

實施例:

如果(A == B) 返回1; else return 0;

相同

回報(A == B)? 1:0

+0

我們還沒有完成三元制,但它看起來很有前途。 – 2013-03-07 20:18:45

0

我不認爲我們會爲你做你的功課,但根據你的老師使用'如果'的定義,你可能會使用三元操作符。

即你可以寫作如果(A)do x else做y作爲A? x:y。

或者,閱讀switch/case語句。這不是一個很好的解決方案,但可以處理你的約束。

+0

沒關係,IvanJoukov,我不希望我的作業爲我完成,好吧,我很沮喪,我會採取它,但這就是爲什麼我故意只給我卡住的部分,所以我wouldn不要動心。我想過使用開關,但如果再次遇到問題,我還是一直在想。然而,我再次看了一遍,我想我現在看到了這是如何工作的。 – 2013-03-07 20:15:47

1

這似乎是一個問題,教你short-circuit evaluation。這個想法是有功能answersYesTo(String question)並使用你的布爾表達式(a || b) && c。短路評估將從評估a開始,如果a評估結果爲false,則僅評估b。原因是如果a是真的,那麼我們已經知道a||b是真實的,所以不需要評估子表達式的最後部分。

此外,如果a||b評估結果爲false,則不會評估c,因爲我們此時知道該表達式將評估爲false

下面的代碼示出了一個可能的實現:

進口java.io.Console;

public class App 
{ 

    static public void main(String [] args) { 
     boolean allowedToBringHome = 
      (answersYesTo("Is the animal black?")||answersYesTo("Is the animal white?")) 
      && answersYesTo("Is it friendly?"); 

     if(allowedToBringHome) { 
      print("You can bring the animal home."); 
     } 
     else { 
      print("Sorry, you can't bring the animal home."); 
     } 
    } 

    static boolean answersYesTo(String question) { 
     String answer = System.console().readLine(question); 
     return answer.compareToIgnoreCase("y")==0; 
    } 

    static void print(String msg) { 
     System.out.println(msg); 
    } 
} 

注意:使用短路評估時,應始終考慮代碼的可讀性。複雜的表達式很難快速閱讀和掌握,這增加了引入錯誤的風險。

+0

我曾經想過使用OR /和你一樣去除ifs,但我仍然遇到太多。我現在看到,我的問題是我如何寫我的功能。謝謝,我認爲我現在可以更好地解決這個問題。 – 2013-03-07 20:22:33

相關問題