[問題] c++請問是否有else if 判斷條件簡化方式

作者: sa12e3   2018-08-26 21:43:00
開發平台(Platform): (Ex: Win10, Linux, ...) Android app模擬c++
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)c++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
各位 前輩:您們好。
因為是c++新手,還請幫忙指導以下的問題,
因為還不太熟悉,懇請幫忙提供簡單明瞭的簡單方式解惑,先謝謝 各位了。
感恩。
else if(c*2-1 == a && c+1 <= b )
{ cout << "*"; }
else if(c*2-1 == b && c+1 <= a )
{ cout << "*";}
else if(c*2-2 == a && c+2 <= b )
{ cout << "*";}
else if(c*2-2 == b && c+2 <= a )
{ cout << "*";}
這一串程式碼是在兩個for回圈內。
/*需要將以上程式碼取代成以下程式碼。*/
e若是int設定為 數字1或c-2等。
然後在上述的兩個for其中一個放入
e++或e
作者: commandoEX (卡曼都)   2018-08-26 22:17:00
你可以讓e設成陣列變成e[i]就能在迴圈中有很多個e啦
作者: stupid0319 (徵女友)   2018-08-26 22:32:00
完全看不懂原PO想要表達的內容,看來我還是太淺了
作者: MOONRAKER (㊣牛鶴鰻毛人)   2018-08-26 22:42:00
看不懂+1 非常深奧
作者: jerryh001   2018-08-27 00:55:00
我覺得你最好列出完整code或是完整問題
作者: CoNsTaR ((const *))   2018-08-27 04:17:00
Linear types?確保變數只能被使用一遍?
作者: s4300026 (s4300026)   2018-08-27 08:32:00
if(e==1戌e==c-2){則使用修改後的方法}聽起來就是原po有兩種輸入情境(e=1和e=c-2),但他目前只寫了一種判斷方法(e=1),然後他想要一種判斷方法可以一次判斷兩種情境(即他所述的新方法),但他不知道要怎麼過濾掉除了上述兩種情境的方法進入判斷式以上為水晶球腦補的結果
作者: sarafciel (Cattuz)   2018-08-27 08:53:00
I think you can describe your problem in English.
作者: sa12e3   2018-08-27 10:51:00
謝謝各位,但發現若要使用陣列 c*2及a,b等數值貌似要一同轉換成陣列才可運行? s4300026大大的解說是正確的,就是希望能有此效果,謝謝 您的細部說明。
作者: Killercat (殺人貓™)   2018-08-27 20:46:00
你這問題其實就是COR(Chain of Responbility)最常解決的問題,不過由於你的statement過短,寫成COR就太搞剛
作者: sa12e3   2018-08-28 09:43:00
不好意思,是否可請 前輩提供cor簡單的範例? 謝謝 您。另外補充,這邊簡化前的程式碼中將被e值取代的值,不只是1,2可無限延伸(3,4,5…)延伸到哪裡依照使用者輸入的數值進行規範,足以顯示畫圖的範圍即可。這部分相信自己有方式可處理此限制範圍的。 但是目前仍卡在將此else if進行多次判斷的問題。
作者: s4300026 (s4300026)   2018-08-28 12:03:00
話說可以給一下雙迴圈的變數嗎? 他們跟e有關係嗎?
作者: sa12e3   2018-08-28 12:33:00
c是使用者輸入條件一個int數字(同時是界定範圍的一個值),其他的a,b是兩個for使用的變數。兩個for中的a,b與e可由c來界定範圍,e可設定為與a或b或c相關,也可讓e自己設定為與a或b或c無關,但最後不管是哪個還是要有c來規範e避免造成不需要的影響。 不好意思,好像說明的不太明白,就跟一般用*畫圖的題目是相同的,還請前輩幫忙給個引導cor的方式,感謝。 不是很了解cor,查了cor感覺複雜,抓不到用在這裡的重點方法。https://ideone.com/cuV48d先貼目前的程式碼,之後再附加其他部分。
作者: sarafciel (Cattuz)   2018-08-28 15:02:00
https://ideone.com/jW7G2M 你把問題拆難了內層的迴圈要記得縮排 還有給變數有意義的名稱
作者: sa12e3   2018-08-28 15:18:00
好厲害,謝謝 您,研究一下,知道要給變數有意義的名稱及縮排很重要,但目前急於學習方法,所以較注重於可先寫出來內容,之後再更改習慣。 感謝 前輩提供另類寫法及提醒編寫習慣的重要性。
作者: yvb   2018-08-28 21:58:00
若可用 ?: 及 abs() 就更方便 ==> https://ideone.com/lcRBcG
作者: sa12e3   2018-08-29 08:27:00
感謝 您的提供,原來還有這樣的寫法。真的沒有想到, 前輩們果然厲害:)
作者: Killercat (殺人貓™)   2018-08-29 21:33:00
COR精神就是連續一大串傳回bool的function, 一個接一個第一個function會檢查自己能否處理 能就丟true 不能就false 給下一個處理。你這例子是邏輯過於簡單 COR不合算,只是順便提一下一般大量if-else是用COR處理較常見
作者: sa12e3   2018-08-31 08:59:00
謝謝 前輩們的指導,受益良多。

Links booklink

Contact Us: admin [ a t ] ucptt.com