Dúvida Java

13 respostas
O

Pessoal vi isso em um teste para certificação:

Qual é valor que colocado aqui faz que com que seja exibido pelo menos uma vez a palavra “passou”

public static void main(String[] args) {
   int x = ___;
   while(x==-x && x!=0){
         System.out.println("passou");
    }
		
}

13 Respostas

nel

Então, eu digo que não há um valor do tipo int que faça com que seja impresso a string em questão.
Já que o valor 0 não é aceito no Loop, o sinal de negativo sempre inverte os valores, ou seja, se entrar com um valor positivo ele compara com ele mesmo mas no formato negativo e vice-versa.

Caso consiga entrar no loop e minha respota esteja errada, por favor, poste a correta.

Abraços!

Giulliano

Eu acho que nenhum valor faria isso:

se x= 1 então x == -x seria 1 == -1 onde o valor de x nunca é alterado e o sinal sempre é diferente (um lado positivo e outro lado negativo)

você poderia usar o 0 se não tivesse a segunda condição já que -0 e 0 ão iguais…fora isso não daria para fazer

marcosvidolin

Não entra no loop.
Tenha em mente que o exame testa o seu conhecimento sobre a linguagem e não o seu nivel lógico em programação.
Provavelmente é esperado que um programador sem experiência assinale a resposta “O CÓDIGO NÃO COMPILA” ao ver:

x==-x

Resumindo: o código compila e não exibe o String independente do numero!
Galera me corrijam ai aew

Espero ter ajudado.
[]'s

sergiotaborda
okara:
Pessoal vi isso em um teste para certificação:

Qual é valor que colocado aqui faz que com que seja exibido pelo menos uma vez a palavra "passou"

public static void main(String[] args) {
   int x = ___;
   while(x==-x && x!=0){
         System.out.println("passou");
    }
		
}

O valor é Integer.MIN_VALUE.

Ele é simétrico de si mesmo e não é zero.

sergiotaborda

marcosvidolin:
Não entra no loop.
Tenha em mente que o exame testa o seu conhecimento sobre a linguagem e não o seu nivel lógico em programação.
Provavelmente é esperado que um programador sem experiência assinale a resposta “O CÓDIGO NÃO COMPILA” ao ver:

x==-x

Resumindo: o código compila e não exibe o String independente do numero!
Galera me corrijam ai aew

Esse codigo é válido significa “x é igual a -x ?”

x == -x

Giulliano

Nesse caso funcionaria já que o valor mínimo de um inteiro é -[telefone removido] e por mais que vc subtraia um valor dele, o resultado sempre será o menor número possível.

Matematicamente falando isso seria possível somente se fosse exposto no problema que:

1º O valor é finito
2º O número de elementos vai de -[telefone removido] a [telefone removido]
3º Caso seja subtraído ou adicionado um elemento ao máximo ou mínimo possível o valor será igual a ele mesmo.

:slight_smile:

B

Não funciona assim Giulliano. Subtrair 1 de Integer.MIN_VALUE dá Integer.MAX_VALUE. Aí entra as propriedades de overflow.

E o problema não é matemático, ele é pegadinha de linguagem de programação.

Java não tem um int positivo equivalente a Integer.MIN_VALUE, pois eles vão de - 2^31 a 2^31 -1. Acontece a mesma coisa com Long.MIN_VALUE.

Byte e Short não tem o mesmo problema por que são convertidos para Integer automaticamente.

sergiotaborda

Bruno Laturner:
Não funciona assim Giulliano. Subtrair 1 de Integer.MIN_VALUE dá Integer.MAX_VALUE. Aí entra as propriedades de overflow.

E o problema não é matemático, ele é pegadinha de linguagem de programação.

Java não tem um int positivo equivalente a Integer.MIN_VALUE, pois eles vão de 2^31 a 2^31 -1. Acontece a mesma coisa com Long.MIN_VALUE.

Calma, calma,… relamente é uma pegadinha da lingugem, mas todos os Integer têm um int equivalente.

Além disso o problema não é a subtração. É a simetria. A operação (-x ) não é uma subtração.

Integer.MIN_VALUE = Integer.MAX_VALUE + 1, sim, portanto, Integer.MAX_VALUE + 1 seria tb uma resposta válida.

Mas em relação ha simetria , lembrem-se que java tem mais negativos que positivos , pois um dos positivos é o zero.
Portanto, MAX_VALUE tem um simétrico , mas MIV_Value não tem porque não ha mais elementos do outro lado do zero. A solução é ele ser simétrico de si mesmo.

O problema em questão é responder à pergunta “Qual é o inteiro que é simétrico de si mesmo, e não é o zero ?”

Matematicamente este numero não existe e dai vem o paradoxo.

Giulliano

Ta certo Sergio…era isso que eu queria dizer… só não sabia que era alterado para o maior valor positivo quando subtraímos do menor valor possível.

Bruno eu sei que é uma pegadinha da linguagem…só estou trazendo isso para a matemática (por isso escrevi matematicamente falando). Escrever um algoritmo em Java é outra coisa.

[]'s

taaqui

Só para deixar esclarecido, esse tipo de tópico nunca é abordado em uma certificação SCJP.

Giulliano

Também acho que esse tio de questão não contemplaria o teste.

sergiotaborda

é verdade.
e querem mais exemplos estranhos como este leiam o Java Puzzles. É muito educativo e junto com o Effective Java é essencial para qq pessoa que queira programar java profissionalmente e ser bom nisso.

tnaires

Muito bom, não conhecia esse livro! Tá na minha lista.

Criado 19 de outubro de 2009
Ultima resposta 22 de out. de 2009
Respostas 13
Participantes 8