目前我的系统能够让用户输入2个数字,找到并返回尾部的最后一个数字,如何才能使数据和数据2仅显示数字,而不是之前的SK1 / SK3。目前我收到了错误;
错误:(177,28)值> =不是(String,Int)的成员 val highest = if(data> = data2){
//Compare 2 values
def mnuCompareTwoStocks(f: (String) => (String, Int)) = {
print("Stock > ")
val data = f(readLine)
print("Stock 2 > ")
val data2 = f(readLine)
val highest = if (data >= data2){
println(data)
}
else
{
println(data2)
}
println(s"${data._1}: ${data._2} ${data2._1}: ${data2._2}")
}
编辑: 工作成果
//Compare 2 values
def mnuCompareTwoStocks(f: (String) => (String, Int)) = {
print("Stock > ")
val data = f(readLine)
print("Stock 2 > ")
val data2 = f(readLine)
if (data._2 >= data2._2){
println("The higher stock is " + data)
}
else
{
println("The higher stock is " + data2)
}
println(s"${data._1}: ${data._2} ${data2._1}: ${data2._2}")
}
答案 0 :(得分:3)
您正在尝试比较(String,Int)
类型的2个元组。这样没有简单的比较运算符。
scala> ("a",3) > ("b",0)
<console>:12: error: value > is not a member of (String, Int)
("a",3) > ("b",0)
^
您希望String
优先还是Int
?
scala> ("a",3)._1 > ("b",0)._1
res0: Boolean = false
scala> ("a",3)._2 > ("b",0)._2
res1: Boolean = true
答案 1 :(得分:1)
您的代码中存在一些问题导致您看到的错误。
首先,您遇到语法错误:要按照您希望的方式打印变量最高,您需要使用+
进行字符串连接:println("The higher stock is " + highest)
其次,最高仅在if
语句中声明,因此它超出println
语句的范围。您可以通过在范围内声明来解决此问题:
...
var highest = 0.0
if(...){
highest = ...
}
else {
highest = ...
}
println("The higher stock is " + highest)
最后,最重要的是,您的方法的整体设计对我来说并没有多大意义。 f 是 mnuCompareTwoStocks 的参数,它是一个函数,可以从String转换为(String,Int)。那你为什么要在这个函数上调用 apply (通过f(readLine)
)并且看起来期待一个数值数据类型呢?甚至这个参数的目的是什么?如果确实想要返回元组,那么在比较值之前,您需要解包数字组件:
val data = f(readLine)
val data2 = f(readLine)
if (data._2 >= data2._2)
...
我看到你编辑了你的问题来解决前两个问题。但是,现在你用你的if语句毫无意义地设置val highest = Unit
......
无论如何,如果你想在它们之间进行数值比较,你应该解压缩元组的Int组件,如上所示。