Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 不带if-else语句的二进制搜索_Scala_Logic_Binary Search - Fatal编程技术网

Scala 不带if-else语句的二进制搜索

Scala 不带if-else语句的二进制搜索,scala,logic,binary-search,Scala,Logic,Binary Search,我想在Scala中编写一个二进制搜索程序,而不使用任何if-else语句。我设计的基本策略使用数组[mid]和搜索键之间比较的返回值。简言之: 1) 基于数组[mid]和搜索_键之间的比较生成返回值 2) 使用该返回值创建唯一的字符串 3) 在该字符串的帮助下使用“反射”调用函数 所以我的问题是…在这种情况下,有没有返回不同值的计算逻辑?我怎样才能做到这一点?例如: if array[mid] == search_key , return 0 if array[mid] > search_

我想在Scala中编写一个二进制搜索程序,而不使用任何if-else语句。我设计的基本策略使用数组[mid]和搜索键之间比较的返回值。简言之:

1) 基于数组[mid]和搜索_键之间的比较生成返回值

2) 使用该返回值创建唯一的字符串

3) 在该字符串的帮助下使用“反射”调用函数

所以我的问题是…在这种情况下,有没有返回不同值的计算逻辑?我怎样才能做到这一点?例如:

if array[mid] == search_key , return 0
if array[mid] > search_key , return 1
if array[mid] < search_key , return 2
如果数组[mid]==搜索键,则返回0
如果数组[mid]>search_键,则返回1
如果数组[mid]

如果有人对此问题有更好的解决方案,也请提出建议。

做类似事情的简单方法是

array(mid) compareTo search_key
这条线相当于

if (array(mid) == search_key) 0
else if (array(mid) < search_key) -1
else 1 // if (array(mid) > search_key)
if(数组(中间)=搜索键)0
else if(数组(mid)搜索键)

至于最好的方法,您可以制定一系列要执行的操作,并将索引计算到该序列中。如果您感兴趣,您可以在

中看到完整的代码,为什么需要使用基于唯一字符串的反射?嗯,我是Scala的初学者,所以不太了解。我想根据使用该返回值形成的任何字符串调用一个方法。通过谷歌搜索,我发现使用字符串名调用方法可以使用Scala中的反射来完成。这就是为什么。这里有一个参考:为什么你不能使用ifs和else?反射真的不应该用于如此简单的事情,因为这是一个大学作业,问题定义说明我们必须在不使用if-else的情况下编写程序。我想基本的想法是避免指令分支。不太确定。我想这可以完成工作。我试试这个。谢谢:)我以为我们用FORTRAN留下了计算后藤:)