SóProvas


ID
1755889
Banca
FCC
Órgão
TRT - 9ª REGIÃO (PR)
Ano
2015
Provas
Disciplina
Programação
Assuntos

Um Analista da área de TI construiu a classe Vectors e a classe de teste VectorsTest utilizando o JUnit.

package sample;

public final class Vectors {

      private Vectors() {}

      public static int scalarMultiplication(int[] a, int[] b) {

           if ((a == null) || (b == null)) {

                  throw new llegalArgumentException("Argumento nulo");

           }

          if (a.length != b.length) {

                 throw new llegalArgumentException("Vetores com tuplas diferentes");

          }

          int sum = 0;

          for (int i = 0; i < a.length; i++) {

                sum += a[i] * b[i];

           }

          return sum;

     }

}

package sample;

import junit.framework.TestCase;

public class VectorsTest extends TestCase {

      public VectorsTest(String testName) {

               super(testName);

      }

      public void testScalarMultiplication() {

        I  

      }


 Ao executar a classe VectorsTest, o teste será reprovado se a lacuna  I  estiver preenchida com a instrução

Alternativas
Comentários
  • Para resolver a questão o candidato deve entender bem o método estático scalarMultiplication() da classe Vectors. Como poderam observar no código, este método recebe dois vetores e retorna um número escalar que representa o multiplicação escalar dos dois vetores informados. O método scalarMultiplication() irá falhar se pelo menos um dos vetores forem nulos(primeiro if do método) ou se o tamanho dos vetores informados forem diferentes(segundo if do método). Dito isso vamos analisar os itens:

    A) assertEquals(0, Vectors.scalarMultiplication(new int[]{0, 0}, new int[]{0, 0}));
    Item errado. Pois este código não será reprovado porque os dois vetores informados não são nulos, são do mesmo tamanho e o resultado do método Vectors.scalarMultiplication() será 0.

    B) assertEquals(39, Vectors.scalarMultiplication(new int[]{3, 4}, new int[]{5, 6})); 
    Item errado. Pois este código não será reprovado porque os dois vetores informados não são nulos, são do mesmo tamanho e o resultado do método Vectors.scalarMultiplication() será 39.


    C) assertEquals(-39, Vectors.scalarMultiplication(new int[]{-3, 4}, new int[]{5, -6})); 

    Item errado. Pois este código não será reprovado porque os dois vetores informados não são nulos, são do mesmo tamanho e o resultado do método Vectors.scalarMultiplication() será -39.


    D) assertEquals(17, Vectors.scalarMultiplication(new int[]{1,2,3}, new int[]{4, 5, 1})); 
    Item errado. Pois este código não será reprovado porque os dois vetores informados não são nulos, são do mesmo tamanho e o resultado do método Vectors.scalarMultiplication() será 17.


    E) assertEquals(100, Vectors.scalarMultiplication(new int[]{6, 8}, new int[]{6,8,-2})); 

    Item certo. Pois este código será reprovado os tamanhos dos dois vetores informados são diferentes.

  • Bastava notar que um dos critérios para passar no teste é se ter vetores de mesmo tamanho (length).

     

    Na letra (e) temos um vetor com 2 elementos e outro com 3 elementos, logo a multiplicação desses dois vetores será reprovada no teste, sendo emitida a mensagem "Vetores com tuplas diferentes":

     

    if (a.length != b.length) { 
             throw new llegalArgumentException("Vetores com tuplas diferentes"); 

    }

     

    Eu acho que uma mensagem mais adequada ao tipo de erro seria: "Vetores com número de tuplas diferentes". Acredito que eles deixaram  assim propositalmente, para tentar confundir.