
今回は、def swapArrayを少し変えて、引数を変更しないで、それのクローンを作ってそれを変えて、返す。様にしたら、違和感がなくなった。

今回は、def swapArrayを少し変えて、引数を変更しないで、それのクローンを作ってそれを変えて、返す。様にしたら、違和感がなくなった。

val aryとval cngary違う変数みたいに見えますが、同じ場所を指している、と思えますが何故?

関数の呼び方を変えても、結果は同じです。cngaryはaryの別名(アリアス)みたい。自分的にはval cngary = aryだったら分かるんですがね。



breakを取ってみました。終了判定用の変数、カウンタ用の変数の追加とwhile文を追加で、不可能では無いようです。Scalaのforは基本、途中で止めるものでは無いとかです。

アノテーションは省略でしたが、ほぼ自動で追加できました。関数では省略できないようです。

substringはVBとScalaで、パラメータの使い方が違うみたいです。


whileの使い方が独特と感じますが…。

forが三重になってますし、breakも使ってますので、直してみたいところですね。


ワーニングはmaxが5以外の値を取らない、で出てます。

関数の引数であるallcardsは変更できないようです。var allcardを変更して、返してます。whileが少し面倒。


allcardsは、変わらないので、val ansに答えを入れてます。

答えをプリントが残ってます。VBでやった通りで出来ると思います。
5行目と14行目に注目です。配列の添字が1から始まるとか、0から始まるとか、最後の添字は配列の大きさ-1とか関係なくなってますね。13行目から18行目は、Scala独特ですかね?

前の課題のトランプの作成と同じ機能です。



今回直したのは、上のTemotoCardInputのみ。エラーデータだとallcardが変わらないので、それで見つけます。エラーでない状態から始めないといけないので、fflagを使います。


自分は出来てから、分けるのが好きなので、FunctionとSubで分けてみます。


VBの場合、ByValとかByRefとか関数の引数に付きますが、少しあやふやですが、単一の変数以外であれば、例えば配列などの場合は、参照渡しになるようだ、と思ってます。この辺も解釈がいろいろあって、自分の考えもはっきりしませんが、アドレスのコピーが渡されると解釈する方も居るようです。なので値渡し以外無い、とか。
一応動いたので、良いとは思いますが。(笑)
入力データのチェックは、単に入力されたものが、allcardになければエラーで、再入力する、だけで良いように思います。
トランプの数を簡単のために、1から5にします。


エラーチェックを入れると結構複雑になるようなので、取り敢えずは省略。一度入力したらそれを以降無効にするのが、面倒そう。でもないか?文字列にない時はエラーでいけますね。出力が思った以上面倒になったのは、発想が悪いせいかも。

52行目から54行目です。今はトランプの各柄(スペードなど)があれば良いのですが、手持ちのカードの枚数が多くて、トランプの文字列データが消されるものが多くて、例えばスペードのカードが全部、手持ちだった場合を考えてませんね。やっぱり、なにかある(笑)