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