EDIT: Rozwiązanie zadania 7 zmienione na wersję używającą 'case class’ – zgodnie z wykładem.
Rozwiązanie, zawiera komentarze, więc nie oddawać bez czytania i zrozumienia, bo jak się o coś zapyta to z kodu nie ma szans zrozumieć jak to działa:
import scala.collection.mutable.ListBuffer
object Lab1 {
def main(args: Array[String]): Unit =
{
val days = List("Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota", "Niedziela")
// 1 A
var ret = ""
for (day <- days) {
ret += day + "\n"
}
println("1 A")
println(ret)
// 1 B
ret = ""
for (day <- days) {
if (day.startsWith("P")) {
ret += day + "\n"
}
}
println("1 B")
println(ret)
// 1 C
ret = ""
days.foreach { day => ret += day + "\n" }
println("1 C")
println(ret)
// 1 D
ret = ""
var i = 0
while (i < days.length) {
ret += days(i) + "\n"
i += 1
}
println("1 D")
println(ret)
// 1 E
println("1 E")
println(generateList(days, ""))
// 1 F
println("1 F")
println(generateListReverse(days, ""))
// 1 G
println("1 G left")
println(days.foldLeft("")(_ + "\n" + _ ))
println("1 G right")
println(days.foldRight("")(_ + "\n" + _))
// 1 H
println("1 H")
println(days.foldRight("\n") { (element, input) => if (element.startsWith("P")) input + element+ "\n" else input })
// 2
val priceMap = Map("Jablko" -> 100, "Pomidor" -> 200)
println("2")
println(priceMap.map({case(a,b) => a -> b * 0.9}))
// 3
println
println("3")
val tuple3 : (String, Int, Double) = ("Al", 42, 200.0)
printTuple3(tuple3)
// 4
println
println("4")
val cenaPomidora : Option[Int] = priceMap.get("Pomidor")
if (cenaPomidora.isDefined) {
println("Cena pomidora: " + cenaPomidora.get)
} else {
println("Nie ma ceny Pomidora w cenniku.")
}
// 5
println
println("5")
var element = "Sobota"
println(element, dayDescription(element))
element = "Poniedzialek"
println(element, dayDescription(element))
element = "Test"
println(element, dayDescription(element))
// 6
println
println("6")
val konto1 = new KontoBankowe()
val konto2 = new KontoBankowe(300)
println(konto1.stanKonta, konto2.stanKonta)
konto1.wplata(111)
konto2.wplata(222)
println(konto1.stanKonta, konto2.stanKonta)
konto1.wyplata(11)
konto2.wyplata(22)
println(konto1.stanKonta, konto2.stanKonta)
// blad przy ustalaniu wartosci, 'readonly'
// konto1.stanKonta = 3
// konto1._stanKonta = 3
// 7
println
println("7")
val osoba1 = Osoba("Jan", "Kowalski")
val osoba2 = Osoba("Piotr", "Nowak")
val osoba3 = Osoba("Michal", "Nieznajomy")
println(getHelloMessage(osoba1))
println(getHelloMessage(osoba2))
println(getHelloMessage(osoba3))
// 8
println
println("8")
println(filterZeros(List(0, 0, 0, 1, 4, 6, 0, 4, 9, 0, 4, 5, 0, 0, 0)))
// 9
println
println("9")
println(increaseByOne(List(1, 3, 6, 2)))
// 10
println
println("10")
println(magicFilter(List(-15, -5, 0, 5, 15, -13, 13, 12)))
}
// 1 E
def generateList(days: List[String], ret: String): String =
{
if (days.nonEmpty) {
return generateList(days.tail, ret + days.head + "\n")
}
ret
}
// 1 F
def generateListReverse(days: List[String], ret: String): String =
{
if (days.nonEmpty) {
return generateListReverse(days.tail, days.head + "\n" + ret)
}
ret
}
// 3
def printTuple3(tuple3: (String, Int, Double)): Unit =
{
println("String: " + tuple3._1, "Int: " + tuple3._2, "Double: " + tuple3._3)
}
// 5
def dayDescription(dayName: String): String = dayName match {
case "Poniedzialek" => "Praca"
case "Wtorek" => "Praca"
case "Sroda" => "Praca"
case "Czwartek" => "Praca"
case "Piatek" => "Praca"
case "Sobota" => "Weekend"
case "Niedziela" => "Weekend"
case _ => "Nie ma takiego dnia"
}
// 6
class KontoBankowe(poczatkowyStanKonta: Int) {
def this() = this(0)
private var _stanKonta: Int = poczatkowyStanKonta
def wplata(kwota : Int): KontoBankowe = {
this._stanKonta += kwota
this
}
def wyplata(kwota : Int): KontoBankowe = {
this._stanKonta -= kwota
this
}
def stanKonta : Int = this._stanKonta
}
// 7
case class Osoba(imie: String, nazwisko: String) {
def nazwa : String = imie + " " + nazwisko
}
def getHelloMessage(osoba: Osoba): String = osoba match {
case Osoba("Jan", "Kowalski") => "Witaj Jan!"
case Osoba("Piotr", "Nowak") => "Czesc Piotr!"
case _ => "Witaj nieznajomy"
}
// 8
def filterZeros(list: List[Int]): List[Int] = {
var newList = new ListBuffer[Int]()
list.foreach { element => if (element != 0) newList += element }
newList.toList
// krotka wersja:
// return list.filter(v => v != 0)
}
// 9
def increaseByOne(numbers : List[Int]) : List[Int] = {
numbers.map((d) => d+1)
}
// 10
def magicFilter(list: List[Int]): List[Int] = {
var newList = new ListBuffer[Int]()
list.foreach { element => if (-5 <= element && element <= 12) newList += scala.math.abs(element) }
newList.toList
}
}