SóProvas


ID
1769911
Banca
CESPE / CEBRASPE
Órgão
TRE-MT
Ano
2015
Provas
Disciplina
Programação
Assuntos

public class EstruturaDeDados {

       public static void main(String[] args) {

         // TODO code application logic here

         Integer A [] = {20,39,10,14};

           EstruturaDeDados a = new EstruturaDeDados();

         a.escreva(A);

         a.gnomeSort(A);

         a.escreva(A);

      }

      public void gnomeSort (Integer A [] ) {

         int i;

         int n;

         i = 0;

         n = A. length;

         while (i < n) {

                if (i==0 A [i-1]<=A [i])

                    i = i+1;

                else {

                    int aux;

                    aux = A [i];

                    A [i] = A [i-1];

                    A [i -1] = aux;

                     this.escreva(A);

                     if (i >0)

                         i = i -1;

                }

          }

       }

       public void escreva (Integer A[]){

          int i;

          int n;

          n = A.length;

          for ( i=0; i<n; i++) {

               System.out.print (A[i]+" , ");

           }

          System.out.println (" ");

       }

}

Assinale a opção que apresenta corretamente o resultado obtido após a execução do código Java apresentado.

Alternativas
Comentários
  • Na parte do código:  if (i==0 A [i-1]<=A [i]) é gerado um erro porque não existe essa expressão. Na verdade ela nem compila. Aí fica a dúvida poderia ser de vários tipos. Vou dar dois exemplos que levam a caminhos diferentes:

    exemplo 1:  if (i==0  && A [i-1]<=A [i])
    exemplo 2:  if (i==0 || A [i-1]<=A [i])

    Pode-se perceber que leva a resultados totalmente diferentes.

  • Acho que deverá ser anulada. O Código está incompleto nessa parte: if (i==0 A [i-1]<=A [i])

    Afinal de contas temos um && ou um ||?
  • Questão mal formulada. Primeiramente, a questão contém um erro no código. Falta um operador lógico na linha 16.

    Por outro lado, pode-se deduzir por teste que o operador correto suprimido é OR (II). Poís AND levarai a um ponteiro i = -1, gerando um erro. Entretanto, mesmo considerando OR a alternativa mais próxima porém incorreta do resultado seria a letra "A", pois a impressão da linha 8 aponta para o array A privado do médoto main. Este array não foi alterado, pois o método gnomeSort recebe uma cópia do array apenas, ficando o array original intacto mesmo após a execução do "a.gnomeSort(A);".

    O resultado correto "seria":

     

    20 , 39 , 10 , 14 ,  (array original)
    20 , 10 , 39 , 14 , 
    10 , 20 , 39 , 14 , 
    10 , 20 , 14 , 39 , 
    10 , 14 , 20 , 39 , 
    20 , 39 , 10 , 14 ,  (array original intacto)

    Ainda há outro problema, todo vez que um objeto EstruturaDeDados é instanciado, ele executa o método construtor (main) da classe EstruturaDeDados que por sua vez instancia outro objeto EstruturaDeDados. Criando um processo recursivo infinito.