2016-11-15 2 views
0

Momentan hat mein System die Möglichkeit für einen Benutzer 2 Zahlen einzugeben, die letzte Zahl am Schwanz ist gefunden und zurückgegeben, wie bekomme ich die Daten und Daten2 nur dort Nummern, nicht die SK1/SK3 vorher. Momentan bekomme ich den Fehler;Scala Can not Resolve Symbol

Fehler: (177, 28) Wert> = ist kein Mitglied von (String, Int) val höchste = if (data> = Daten2) {

//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}") 

    } 

EDIT: Das Arbeitsergebnis

//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

Machen Sie es val höchste = wenn (...) Daten sonst data2' – rethab

+0

@rethab gleichen Fehler ist aufgetreten –

Antwort

3

Sie versuchen, 2 Tupel des Typs (String,Int) zu vergleichen. Es gibt keinen einfachen Vergleichsoperator für solche.

scala> ("a",3) > ("b",0) 
<console>:12: error: value > is not a member of (String, Int) 
     ("a",3) > ("b",0) 
      ^

Haben Sie die String haben Vorrang wollen oder die Int?

scala> ("a",3)._1 > ("b",0)._1 
res0: Boolean = false 

scala> ("a",3)._2 > ("b",0)._2 
res1: Boolean = true 
+0

Ja, ich möchte int, wie ich sie vergleichen kann, habe ich meine Frage und den Fehler –

+0

bearbeitet Wenn Sie möchten die "Int" zum Vergleich dann extrahieren Sie es wie gezeigt. – jwvh

1

Es gibt einige Probleme in Ihrem Code, die die Fehler verursachen, die Sie sehen.

Zuerst müssen Sie einen Syntaxfehler: aus der Variablen höchste die Art und Weise Sie drucken möchten, müssen Sie + für String-Verkettung verwenden: println("The higher stock is " + highest)

Zweitens höchste nur in Ihrem erklärt if Aussagen so ist es außerhalb des Geltungsbereichs für die println Aussage. Sie können dieses Problem lösen, indem sie in ihrem Umfang zu erklären:

... 
var highest = 0.0 
if(...){ 
    highest = ... 
} 
else { 
    highest = ... 
} 
println("The higher stock is " + highest) 

Schließlich und am wichtigsten ist, ist das gesamte Design Ihrer Methode nicht wirklich Sinn für mich. f ist Ihr Parameter mnuCompareTwoStocks, und es ist eine Funktion, die von String in (String, Int) konvertiert. Also warum rufen Sie anwenden (über f(readLine)) auf diese Funktion und scheinbar erwartet einen numerischen Datentyp zurück? Was ist der Zweck dieses Parameters? Wenn ja, möchten Sie das Tupel zurückgegeben werden, müssen Sie die numerische Komponente entpacken, bevor die Werte zu vergleichen:

val data = f(readLine) 
val data2 = f(readLine) 
if (data._2 >= data2._2) 
... 

Ich sehe Sie Ihre Frage, die ersten beiden Probleme zu lösen bearbeitet. Aber jetzt sind Sie sinnlos val highest = Unit mit Ihrer if-Anweisung ...

Ungeachtet dessen sollten Sie die Int-Komponente Ihres Tupel entpacken, wenn Sie einen numerischen Vergleich zwischen ihnen durchführen möchten, wie oben gezeigt.