1. A, D
Opção A é operador de igualdade e pode ser usado em valores numéricos primitivos, valores booleanos e referencias de objetos.
Opção B e C são ambos operadores aritméticos e NÃO podem ser aplicados para um valor booleano.
Opção D é um operador de complemento lógico e é usado exclusivamente por valores booleanos.
Opção E é um operador de módulo, que pode ser usado com valores numéricos primitivos.
Finalmente a opção F é um operador relacional que compara os valores de dois números.
2. A, B, D.
O valor de x + y é automaticamente promovido para int, portanto, int e qualquer tipo de dados que puder ser promovido automaticamente para int irão funcionar. Opções A, B e D são esses tipos de dados.
Opção C não irá funcionar porque booleano não é um tipo de dados númerico.
Opções E e F não irão funcionar sem uma fusão(cast) para um tipo de dados menor.
3. F.
Neste exemplo, o operador ternário tem duas expressões, uma do tipo String e a outra booleana. O operador ternário é permitido para expressões que não têm tipos de correspondência, porém o problema aqui é a referencia é do tipo String. O compilador sabe que a primeira expressão é do tipo String, mas a segunda expressão não pode ser atribuída a uma String. Portanto essa linha não irá compilar.
3. F. In this example, the ternary operator has two expressions, one of them a String and the other a boolean value. The ternary operator is permitted to have expressions that don’t have matching types, but the key here is the assignment to the String reference. The compiler knows how to assign the first expression value as a String, but the second boolean expression cannot be set as a String; therefore, this line will not compile.4. B, C, D, F.
O código não compila como está, portanto a opção A está incorreta. O valor 2 * x é automaticamente promovido para long e não pode ser armazenada automaticamente em y, que está em int. Opção B, C e D resolvem o problema por reduzir o valor long para int. Opção E não resolvem o problema e na verdade será pior ao tentar substituir o valor por um tipo de dados menor. Opção F resolve o problema aumentando o tipo de dados da atribuição de modo que o long é permitido.
5. C.
Este código não contém nenhum erro de compilação ou um loop infinito, portanto as opções D, E e F estão incorretas. O instrução break na linha 8 faz com que o loop execute uma vez e termine, a opção C é a resposta correta.
6. F.
O código não compila porque duas instruções else não estão encadeados sem instruções if-then, então a resposta correta é a opção F. Opção E está incorreta, a linha 6 por si só não causa um problema, somente quando isso está emparelhada com a linha 7. Uma maneira de corrigir o código e compilar seria adicionar uma instrução if-then na linha 6. Outra solução seria remover a linha 7.
6. F. The code does not compile because two else statements cannot be chained together without additional if-then statements, so the correct answer is option F. Option E is incorrect as Line 6 by itself does not cause a problem, only when it is paired with Line 7. One way to fix this code so it compiles would be to add an if-then statement on line 6. The other solution would be to remove line 7.7. D.
Como você aprendeu na seção "Operador Ternário", embora os parênteses não serem exigidos, eles melhoram a leitura do código, como a seguinte declaração equivalente:
System.out.println((x > 2) ? ((x < 4) ? 10 : 8) : 7)
Aplicamos o operador ternário externo primeiro, pois é possível que a expressão interna pode nunca seja avaliada. Como (x > 2) é verdadeiro, isso reduz o problema para:
System.out.println((x < 4) ? 10 : 8)
Como x é maior que 2, a resposta é 8, ou a opção D neste caso.
7. D. As you learned in the section “Ternary Operator,” although parentheses are not required, they do greatly increase code readability, such as the following equivalent statement: System.out.println((x > 2) ? ((x < 4) ? 10 : 8) : 7) We apply the outside ternary operator first, as it is possible the inner ternary expression may never be evaluated. Since (x>2) is true, this reduces the problem to: System.out.println((x < 4) ? 10 : 8) Since x is greater than 2, the answer is 8, or option D in this case.8. B.
Este exemplo é complicado devido ao segundo operador de atribuição incorporado na linha 5. A expressão (z=false) atribui o valor false para z e retorna false para toda a expressão. Como y é diferente de 10, o lado esquerdo retorna true; no entanto o ou exclusivo (^) de toda expressão atribuída a x será true. A saída reflete essas atribuições, sem alteração para y, porém somente a opção B é a resposta correta. O código compila e executa sem problemas, portanto a opção F está incorreta.
8. B. This example is tricky because of the second assignment operator embedded in line 5. The expression (z=false) assigns the value false to z and returns false for the entire expression. Since y does not equal 10, the left-hand side returns true; therefore, the exclusive or (^) of the entire expression assigned to x is true. The output reflects these assignments, with no change to y, so option B is the only correct answer. The code compiles and runs without issue, so option F is not correct.9. F.
Neste exemplo, não há a declaração de atualização do loop for, pois a instrução é opcional, então a opção D está incorreta. A expressão dentro do loop incrementa i mas atribui o valor antigo de i por ser i++. Fazendo com que o i termine o loop com o mesmo valor que começa, com: 0. O loop irá repetir infinitamente, retornando a mesma instrução repetidamente porque i permanece com 0 após cada iteração do loop.
10. D.
A linha 4 gera uma possível perda de erro do compilador de precisão. O operador de fundição(cast) tem maior precedência, por isso é avaliado primeiro, convertendo a para byte. Em seguida, a adição é avaliada, promovendo a e b para valores int. O valor 90 é um int e não pode ser atribuído para a variável sum que está em bytes, sem uma conversão explícita, o código não irá compilar. O código poderia ser corrigido com parênteses em torno de (a+b), a opção C seria resposta correta.
10. D. Line 4 generates a possible loss of precision compiler error. The cast operator has the highest precedence, so it is evaluated first, casting a to a byte. Then, the addition is evaluated, causing both a and b to be promoted to int values. The value 90 is an int and cannot be assigned to the byte sum without an explicit cast, so the code does not compile. The code could be corrected with parentheses around (a + b), in which case option C would be the correct answer.11. A.
O asterisco(*) e a porcentagem(%) tem a mesma precedência, porém a expressão é avaliada da esquerda para a direita. O resultado de 5 * 4 é 20, e 20 % 3 é 2 (20 dividido por 3 é 18, o resto é 2). A saída é 2 e a opção A é a resposta correta.
11. A. The * and % have the same operator precedence, so the expression is evaluated from left-to-right. The result of 5 * 4 is 20, and 20 % 3 is 2 (20 divided by 3 is 18, the remainder is 2). The output is 2 and option A is the correct answer.12. D.
A variável x é int e s é uma referência de um objeto String. O dois tipos de dados são incomparáveis porque nenhuma variável pode ser convertida no tipo da outra variável. O erro do compilador ocorre na linha 5 quando a comparação é tentada, então a resposta é a opção D.
12. D. The variable x is an int and s is a reference to a String object. The two data types are incomparable because neither variable can be converted to the other variable’s type. The compiler error occurs on line 5 when the comparison is attempted, so the answer is option D.13. A.
O código compila com sucesso, então as opções C e D está incorretas. O valor de b depois da linha 4 é false. No entanto, a declaração if-then na linha 5 contém uma atribuição, não uma comparação. A variável b é atribuída como true na linha 3, e o operador de atribuição retorna true, então a linha 5 é executada e exibe Success, a resposta é a opção A.
13. A. The code compiles successfully, so options C and D are incorrect. The value of b after line 4 is false. However, the if-then statement on line 5 contains an assignment, not a comparison. The variable b is assigned true on line 3, and the assignment operator returns true, so line 5 executes and displays Success, so the answer is option A.14. C.
O código é compilado com sucesso, portanto a opção F está incorreta. Na linha 5, o pre-incremento é utilizado, onde c incrementa o valor de 7 para 8 e o novo valor é retornado na expressão. O valor de result é calculado pela adição do 4 original com o 8 da variável c já incrementada, resultando em um novo valor igual a 12, que é impresso na linha 6. Portanto, a opção C é a resposta correta.
15. E.
Isto é realmente um problema muito mais simples do que parece ser. A declaração while na linha 4 está sem parênteses, então o código não será compilado, e a opção E é a resposta correta. Se o parênteses forem adicionados, a opção F seria a resposta correta, pois o loop não usa chaves para incluir x++ e a expressão boleana nunca muda. Finalmente, se as chaves forem adicionadas ao redor de ambas expressões, a saída será 10, 6 e a opção B estaria correta.
15. E. This is actually a much simpler problem than it appears to be. The while statement on line 4 is missing parentheses, so the code will not compile, and option E is the correct answer. If the parentheses were added, though, option F would be the correct answer since the loop does not use curly braces to include x++ and the boolean expression never changes. Finally, if curly braces were added around both expressions, the output would be 10, 6 and option B would be correct.16. D.
A variável y é declarada dentro do corpo da instrução do-while, portanto está fora do escopo na linha 6. A linha 6 gera um erro do compilador, portanto, a opção D é a resposta correta.
16. D. The variable y is declared within the body of the do-while statement, so it is out of scope on line 6. Line 6 generates a compiler error, so option D is the correct answer.17. D.
O código compila sem erros, portanto a opção F está incorreta. Depois da primeira execução do loop, i é decrementado para 9 e o result para 13. Então i não é 8, keepGoing é false e o loop continua. Na próxima iteração, i é decrementado para 8 e o result para 11. Na segunda execução, i está igual a 8, portanto keepGoing é definido para false. Na conclusão do loop, o loop termina pois keepGoing não é mais true. O valor do result é 11, e a resposta correta é a opção D.
18. A.
A expressão da linha 5 é verdadeira quando row * col é um número par. Na primeira iteração, row = 1 e col = 1, porém a expressão na linha 6 é falsa, o continue é ignorado, e count é incrementado para 1. Na segunda iteração, row = 1 e col = 2, então a expressão da linha 6 é verdadeira e o continue termina o loop externo com o count ainda em 1. Na terceira iteração, row = 2 e col = 1, então a expressão na linha 6 é verdadeira e o continue termina o loop externo com o count ainda em 1. Na quarta iteração, row = 3 e col = 1, então a expressão na linha 6 é falsa e o continue termina o loop externo com count é incrementado para 2. Finalmente na quinta e final iteração, row = 3 e col = 2, então a expressão na linha 6 é verdadeira e o continue termina o loop externo ainda em 2. O resultado de 2 é exibido, portanto a resposta é a opção B.
18. A. The expression on line 5 is true when row * col is an even number. On the first iteration, row = 1 and col = 1, so the expression on line 6 is false, the continue is skipped, and count is incremented to 1. On the second iteration, row = 1 and col = 2, so the expression on line 6 is true and the continue ends the outer loop with count still at 1. On the third iteration, row = 2 and col = 1, so the expression on line 6 is true and the continue ends the outer loop with count still at 1. On the fourth iteration, row = 3 and col = 1, so the expression on line 6 is false, the continue is skipped, and count is incremented to 2. Finally, on the fifth and final iteration, row = 3 and col = 2, so the expression on line 6 is true and the continue ends the outer loop with count still at 2. The result of 2 is displayed, so the answer is option B.19. D.
Antes da primeira iteração, m = 9, n = 1 e x = 0. Depois da iteração do primeiro loop, m é atualizado para 8, n para 3, e x para a soma dos novos valores de m+n, 0 + 11 = 11. Depois da iteração do segundo loop, m é atualizado para 7, n para 5 e x para a soma dos novos valores de m + n, 11 + 12 = 23. Depois da iteração do terceiro loop, m é atualizado para 6, n para 7 e x para a soma dos novos valores de m + n, 23 + 13 = 36. Na quarta iteraçao do loop, m > n é avaliado como falso, como 6 < 7 não é verdade. O loop termina e o valor mais recente de x, 36 é exibido, portanto a resposta correta é a opção D.
19. D. Prior to the first iteration, m = 9, n = 1, and x = 0. After the iteration of the first loop, m is updated to 8, n to 3, and x to the sum of the new values for m + n, 0 + 11 = 11. After the iteration of the second loop, m is updated to 7, n to 5, and x to the sum of the new values for m + n, 11 + 12 = 23. After the iteration of the third loop, m is updated to 6, n to 7, and x to the sum of the new values for m + n, 23 + 13 = 36. On the fourth iteration of the loop, m > n evaluates to false, as 6 < 7 is not true. The loop ends and the most recent value of x, 36, is output, so the correct answer is option D.20. B.
O código compila e executa sem problemas, portanto as opções C, D e E não estão corretas. O valor de grade é 'B' e há uma declaração case correspondente que fará com que "great" seja impresso. Não há nenhuma declaração break após o case, no entanto, a próxima declaração case será alcançada, e "good" será impresso. Há um break após essa instrução case, no entanto a declaração switch terminará. A resposta correta é a opção B.
20. B. The code compiles and runs without issue, so options C, D, and E are not correct. The value of grade is 'B' and there is a matching case statement that will cause "great" to be printed. There is no break statement after the case, though, so the next case statement will be reached, and "good" will be printed. There is a break after this case statement, though, so the switch statement will end. The correct answer is thus option B.