2011-11-11 48 views
2

我正在爲一個初學者編程課程做一些小程序,在我的程序中我有兩個包含數字的變量。無論如何,我需要找出哪個號碼是做大打印根據它相應的消息,比如我有:是否有可能在不使用if語句的情況下找出哪個數字更大?

int x = 5; 
int y = 10; 

我需要打印:

「這是真的,y是大於x 「;

現在的事情是,我知道我可以使用一個簡單的if語句,但我不允許使用它,現在它讓我想知道,它甚至有可能嗎?如果是這樣,我該怎麼做?我怎麼可以檢查哪些數大於沒有做類似:

if (x > y) 
    answer = true; 

...

在此先感謝。

回答

7

那麼你可以這樣做:

boolean answer = x > y; 

表達x > y只是boolean類型的表達式。雖然boolean表達式是經常用於條件if語句,循環等,他們不必是 - 簡單的分配工作正常。

這聽起來像你想雖然反向:

boolean answer = y > x; 

然後你可以使用的answer值建立顯示字符串...

+0

好吧,這就是我需要的!就如此容易。 – Popokoko

5

使用三元運算:

System.out.println(x > y ? "It is true that x is greater than y" : ""); 
4

三元運算符「?」:

String output = (x > y)? "x is greater than y":"y is greater than x"; 
2

其他人提到的三元條件運算符將起作用。假設你正在尋找創造性的方式來做到這一點,而不是實際的,這裏的另一種方法:

int x = 5; 
int y = 10; 
while(y > x){ 
    System.out.println("It is true that y is bigger than x."); 
    return; 
} 
System.out.println("It is false that y is bigger than x."); 

while只是作爲一個奇特的if,因爲return意味着否則無限循環將只執行最多一次。

下面是不是依賴於短路布爾評價又如:

public static void main(String...args){ 
    int x = 5; 
    int y = 10; 
    boolean answer = (y > x); 
    boolean testTrue = answer && printTrue(); 
    boolean testFalse = testTrue || printFalse(); 
} 

private static boolean printFalse() { 
    System.out.println("It is false that y is bigger than x."); 
    return true; 
} 

private static boolean printTrue() { 
    System.out.println("It is true that y is bigger than x."); 
    return true; 
} 

當然在實際的生產代碼,你不應該這樣做,但它可以想到的非正統的方式來編寫一些有趣的東西這對探索語言會有所幫助。

1

你的問題被標記爲Java,但你沒有在你的問題中指定Java。在Java中,有多種方式可以獲得相同的結果,包括測試布爾表達式x > y,比如三元運算符。我會認爲這些相當於明確的if聲明。

其它可能性:

  • 計算的x - y平方根。如果y比較大,這會引發異常。在呼叫者中捕獲異常並報告y是較大的數量。如果沒有異常,則報告x更大。
  • 在LISP,Ruby或支持符號類型的其他語言中,形成一個列表((symbol x, x), (symbol y, y))並對列表進行排序。然後將第二個符號報告爲具有較大值的變量。
  • 如果使用程序集,BASIC,PL/1等,可以使用算術表達式來選擇GOTO語句的目標。取決於x還是y較大,執行將在代碼的不同部分恢復。或者使用上一個項目符號中的列表排序技巧來選擇GOTO標籤。
  • 一般來說,如果x較大,則表達式((x - y)/abs(x - y) + 1)/2將產生1,如果y較大則表達式爲0。這個結果可以用於從兩個備選方案列表中選擇數據,函數等,從而生成沒有if語句的條件行爲。
+0

因爲他爲Java添加了標籤,所以他不需要在問題中指定Java ......是不是指什麼標籤? –

+0

他確實說過一個開始的編程課程。我希望他的課程不會假設Java是The Way It Done TM。 – wberry

+0

葉我知道我沒有提到Java的問題,因爲我已經知道C#和它並沒有關係什麼代碼語言答案我會得到。無論如何,這個解決方案過於先進,但它是defantily我在這篇文章中收到的最有趣的一個:)非常apperciated! – Popokoko

0

我知道在某些語言中,您可以使用短路評估來構建答案。

如果A爲真,則表達式(A && B)總是評估爲B.如果A是假的,那麼B就不會被評估。 類似地,如果A爲假,則(A || B)評估爲B.如果A是真的,B永遠不會被評估。

雖然我不是100%肯定的Java,你想表達的是:

String output = ((x > y) && "it is true that X is greater than Y") 
    || (((x < y) && "it is true that X is less than Y") 
    || "it is true that X is equal to Y"); 
+0

您可以利用短路評估(請參閱[我的答案](http://stackoverflow.com/questions/8099288/is-it-possible-to-find -out-which-number-is-greater-without-using-an-if-statement/8099478#8099478)),但你的答案不會編譯,因爲它將'boolean'類型與'String'類型混合在一起。 –

1

你可以使用遞歸(但我不會推薦它)

public int compare (int a , int b) 
{ 
    switch (a) 
    { 
      case Integer.MIN_VALUE : 
       switch (b) 
       { 
       case Integer.MIN_VALUE : 
        return 0 ; 
       default : 
        return -1 ; 
       } 
      default : 
       switch (b) 
       { 
        case INteger.Min_VALUE : 
         return 1 ; 
        default : 
         return compare (a-1 , b-1) ; 
       } 

    } 
} 
+0

偉大的解決方案,但切換案例太高級這個特定的問題 – Popokoko

+0

我正在教一個班,並想向他們展示一個 mist

1

(A + b)/ 2 + Abs(ab)/ 2是更大的數字。

相關問題