Вместо того, чтобы получать элементы массива в качестве вывода, я получаю адрес массива (Выход: [I@59494225) в scala ---- В приведенном ниже коде я ожидаю вывод как (2,1) - PullRequest
0 голосов
/ 01 апреля 2020

Здесь необходимо сравнить оба элемента массива a (i) и b (i). И обновите

Если a [i]> b [i], то a присуждается 1 балл
Если b [i]> a [i], то b присуждается 1 балл

object MyWizard extends App {
    def compareTriplets(a:Array[Int],b:Array[Int]):Array[Int]= {
        var aCount=0
        var bCount=0
        for(i<-0 to a.length-1){
            for(j<-0 to b.length-1){
                if(i==j) {
                    if(a(i)>b(i)){
                        aCount=aCount+1
                    }else if(a(i)<b(i)){
                        bCount=bCount+1
                    }
                }
            }
        }
        val c:Array[Int]=Array(aCount,bCount)
        c
    }
    println(compareTriplets(Array(1,32,3),Array(453,2,1)))
}

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Вот более эффективная, идиоматическая c, обобщенная c и более простая реализация вашего алгоритма.

// This works for any type as long as we know how to compare instances of it.
def compareTriplets[T : Ordering](as: List[T], bs: List[T]): (Int, Int) = {
  import Ordering.Implicits._ // Provides the comparison operators.

  (as lazyZip bs).foldLeft((0, 0)) {
    case ((aCount, bCount), (a, b)) =>
      if (a > b) (aCount + 1, bCount)
      else if (a < b) (aCount, bCount + 1)
      else (aCount, bCount)
  }
}
0 голосов
/ 01 апреля 2020

используйте метод toString (), потому что он интерпретируется как его адрес данных, а не как строковый формат данных. Вот простой пример geeksForGeeks: https://www.geeksforgeeks.org/scala-map-tostring-method-with-example/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...