2016-12-15 17 views
2

私はscalaを初めて使用していますが、do whileループを実装しようとしていますが、止めることはできません。私は間違って何をしているのか分かりません。誰かが私を助けることができれば、それは素晴らしいだろう。それは私が知っている最高のループではないが、私は言語に新しいです。 は、ここに以下の私のコードです:Scala Do Whileループが終了しない

def mnuQuestionLast(f: (String) => (String, Int)) ={ 
    var dataInput = true 

    do { 
    print("Enter 1 to Add Another 0 to Exit > ") 
    var dataInput1 = f(readLine) 

    if (dataInput1 == 0){ 
     dataInput == false 
    } else { 
     println{"Do the work"} 
    } 
    } while(dataInput == true) 
} 
+2

また、 'dataInput'を変更しようとする場合、' dataInput == false'は '= 'の1つを削除する必要があります – StuartLC

+1

このような場合には、デバッグの使い方あなたのIDEの機能。 –

答えて

5

あなたは==AnyRefに定義されているために動作し0に(この場合はTuple2[String, Int])タプル型を、比較しているが、あなたが考えるとあまり意味がありません。それ。あなたはタプルの2番目の要素に注目する必要があります。

if (dataInput1._2 == 0) 

それとも、読みやすさを少し強化したい場合、あなたはタプルを分解することができます

val (line, num) = f(readLine) 
if (num == 0) 

また、あなたが持つdataInputを比較しています代わりに偽割り当てるfalsedataInput == false):

dataInput = false 
+0

お返事ありがとうございます!しかし、0が入力されてもループを中断しませんか? – bigjoed

+0

@bigjoed最新の回答を参照してください。 –

+0

最新の回答をありがとう!これは、1が入力されてもループを終了しますか? – bigjoed

1

あなたのコードが機能規約を通過しませんでした。 タプルであり、あなたはそれがあなたがより良い方法でコードを再構築することができますif(dataInput1._2==0)

の場合ので、あなたを変更する必要がありますdataInput1._2==0

によってあなたのタプルの第二の値ですチェックすべきf返す値:

import util.control.Breaks._ 


def mnuQuestionLast(f: (String) => (String, Int)) = { 
    breakable { 
    while (true) { 
     print("Enter 1 to Add Another 0 to Exit > ") 
     f(readLine) match { 
     case (_, 0) => break() 
     case (_,1) => println(the work" 
     case _ => throw new IllegalArgumentException 
     } 
    } 
    } 
} 
+0

お返事ありがとうございます!ただし、1を入力するとループも停止しますか? – bigjoed

+0

@bigjoedはい、あなたのifは0ではないもので動作し、私はあなたのものとして書きました。 – Pooya

関連する問題