三元运营商在线的所有示例都只有找到最大数字的方法。
是否可以设计代码以使用三元运算符找到第二大数字的3或4个数字?
答案 0 :(得分:0)
我认为使用三元运算符获得第二大数字并不是一个过于聪明的技巧。但您可以使用三元运算来获得最小的数字:
int min(int a, int b) {
return (a < b)? a : b;
}
int secondLargest(int a, int b, int c) {
return (a < b && a < c)? min(b, c) :
(b < a && b < c)? min(a, c) :
min(a, b);
}
对于4个数字,我们可以使用先前定义的函数:
int secondLargest(int a, int b, int c, int d) {
int minVar = (min(a, b), min(c, d))
return a == minVar? secondLargest(b, c, d) :
b == minVar? secondLargest(a, c, d) :
c == minVar? secondLargest(a, b, d) :
secondLargest(a, b, c) :
}
你可以为任意大量的变量保留这些变量,但在某些时候,在数组中对它们进行排序然后读出倒数第二个条目会更有意义。
答案 1 :(得分:0)
您可以使用三元运算符获得3个数字中的第二个(protected LoginPackage preLogin() throws BankException, IOException {
urlopen = new Urllib(context, CertificateReader.getCertificates(context, R.raw.cert_okq8));
Date d = new Date();
List<NameValuePair> postData = new ArrayList<NameValuePair>();
response = urlopen
.open("https://nettbank.edb.com/Logon/index.jsp?domain=0066&from_page=http://www.okq8.se&to_page=https://nettbank.edb.com/cardpayment/transigo/logon/done/okq8");
//p_tranid is the epoch time in milliseconds
postData.add(new BasicNameValuePair("p_tranid", Long.toString(d.getTime())));
postData.add(new BasicNameValuePair("p_errorScreen", "LOGON_REPOST_ERROR"));
postData.add(new BasicNameValuePair("n_bank", ""));
postData.add(new BasicNameValuePair("empty_pwd", ""));
postData.add(new BasicNameValuePair("user_id", getUsername().toUpperCase()));
postData.add(new BasicNameValuePair("password", getPassword()));
return new LoginPackage(urlopen, postData, response,
"https://nettbank.edb.com/Logon/logon/step1");
}
,a
和b
),如下所示:
c
我们的想法是找出哪个是最大的,然后选择其中两个中最大的一个 - 除了这三个中最大值之外的最大值。
在上文中,如果a是最大的(大于int x = (a >= b && a >= c) ? ((b >= c) ? b : c) :
((b >= c) ? ((a >= c) ? a : c) : ((a >= b) ? a : b));
和(a >= b && a >= c)
),b
将为真 ...如果是,则结果为c
,其中((b >= c) ? b : c)
和b
的较大者。
如果c
不是最大,我们会评估a
。在此,((b >= c) ? ((a >= c) ? a : c) : ((a >= b) ? a : b))
检查(b >= c)
是否是三者中最大的(我们已经知道b
不是,所以我们只比较a
和b
) ...如果c
是三者中最大的一个,我们会使用b
来获得((a >= c) ? a : c)
和a
中最大的一个。
如果c
和a
都不是最大的,那么b
必须是...所以我们评估c
以获得最大的((a >= b) ? a : b)
和a
。
相同的模式可以扩展到四个数而不是三个......但即使有三个数也会变得很长,而且使用一个(可能是内联的)函数并使用更简单的方法可能更有意义。< / p>