簡體   English   中英

如何在沒有任何條件語句或運算符的情況下編寫條件?

[英]How can I write a conditional without any conditional statements or operators?

我的計算機老師要我編寫代​​碼來連接兩個字符串(以一種奇怪的方式)。 代碼應該是這樣的,如果兩個字符串的長度相等,那么輸出應該是(string1 + string2)。 否則輸出應該是長度更大的字符串。 挑戰是我不應該使用if else語句或condition?exp1:exp2 這是我能夠提出的(a和b是輸入字符串的名稱):

int aLen = a.Length;
int bLen = b.Length;
//+1 is added to lengths to prevent divide by zero 
int bGreatFlag = ((aLen+1) % (bLen + 1)) / (aLen + 1);  //1 if aLen < bLen; 0 Otherwise
int aGreatFlag = ((bLen+1) % (aLen+1)) / (bLen+1);  //1 if bLen < aLen; 0 Otherwise
string result = (a + b).Substring((bGreatFlag) * aLen,(aLen + bLen)-(bGreatFlag*aLen)-(aGreatFlag*bLen));

我相信還有另一種方法可以解決這個問題,我完全沒有這個問題(一個內置函數或一些LINQ可能?)。 任何其他方法或正確方向的任何指針有條件地連接字符串將是非常有幫助的。 謝謝 :) 。 如果對此的答案非常簡單,請善待。

既然你被允許使用LINQ,這是一個可能的解決方案:

但是你的字符串進入一個集合,按字符串的長度對它進行分組,按字符串的長度對結果進行排序,然后使用最長字符串的組。 從現在開始,您擁有兩個字符串(如果長度相等)或較長字符串的集合,請使用String.Join創建此集合的字符串。

劇透 (不要錯過自己實現這個的樂趣):

var result = String.Join(“”,new [] {a,b} .GroupBy(x => x.Length).OrderByDescending(x => x.Key).First()。ToArray());

您可以使用Math.Sign來確定哪個長度更大。 希望這可以幫助...

string a, b, result;
switch (Math.Sign(a.Length - b.Length))
{
    case 1: result = a; break;
    case -1: result = b; break;
    default: result = a + b; break;
}

嘗試使用這樣的

        string r = "bla", rr = "blabla";
        while (rr.Length > r.Length)
        {
            MessageBox.Show("it works");
            break;
        }

其中r和rr是兩個字符串的一個例子,當它進入break時,它只能運行一次,所以它會像if ...

既然我喜歡你的做法,我會為你改進一下:

            string a = "strin";
        string b = "string";
        string combined = (a + b);

        int aLength = a.Length; 
        int bLength = b.Length; 
        int aCheck = (aLength % bLength) / aLength;  
        int bCheck = (bLength % aLength) / bLength; 

        // If aCheck and bCheck are both 0 (same length) it isn't going to add any characters from the substring as
        // aLength * 0 = 0. If either aCheck or bCheck is 1 then it will add the length from aLength again to the string.
        string result = combined += combined.Substring(0, (aLength * (aCheck + bCheck)));
        result += combined.Substring(0, (bLength * bCheck)); ;

根據其他人的評論,你的老師並沒有排除所有可能的分支,例如你可以使用一段while並在一個循環后中斷。 switch將是我的最愛,使用CompareTo()將輸出范圍縮小到-1, 0 and 1

     switch ((s1.Length - s2.Length).CompareTo(0))
     {
        case -1: // s1 less than s2
           return s2;
        case 1: // s1 greater than s2
           return s1;
        case 0: // equal length
           return s1 + s2;
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM