OK, řešení č. 2, snad už projde přes komisi:
package casematrix {
abstract class Matrix(array: Array[Array[Double]]) {
private val elements = array
def toArray(): Array[Array[Double]] = {
this.elements
}
}
object Matrix {
def newMatrix(array: Array[Array[Double]]) : Matrix = {
if (array.length == array(0).length) new SquareMatrix(array)
else new RectangleMatrix(array)
}
def multiply(first: Matrix, second: Matrix) = {
newMatrix(first.toArray()) // dummy
}
}
case class RectangleMatrix(array : Array[Array[Double]]) extends Matrix(array)
case class SquareMatrix(array : Array[Array[Double]]) extends Matrix(array) {
def trace() : Float = {
return 0; // dummy
}
}
}
import java.lang.RuntimeException
import casematrix._
object MatrixCaseApp extends App {
val m = Matrix.newMatrix(Array(Array(1.0, 2.0),Array(1.0, 2.0)))
val n = Matrix.newMatrix(Array(Array(1.0, 2.0),Array(1.0, 2.0)))
Matrix.multiply(m, n) match {
case m @ SquareMatrix(_) => println(m.trace())
case _ => println("Sorry, not a square matrix")
}
}