Re:Erro de sintese, na condição if

7 respostas
David

Você não pode fazer comparação de três variáveis desse jeito. Teria que fazer isso:

if ( (numero1 > numero2) && (numero2 > numero3) ) { // ... }Ou seja, se numero1 for maior que numero2 e numero2 for maior que numero3…

Ele deu esse erro do boolean pelo seguinte motivo, Quando você fez isso:

if (numero1 > numero2 > numero3) { ... }Primeiro ele avaliou o resultado de numero1 > numero2 e isso é um boolean (true ou false) e depois ele comparou esse resultado (que é boolean) com numero3, mas não é possível comparar boolean com int, entendeu?

Quando eu faço da maneira certa, como eu mostrei mais acima, eu comparo numero1 com numero2, que dá um boolean, comparo numero2 com numero3, que dá outro boolean e depois eu faço o AND de dois booleans, o que é válido.

7 Respostas

peczenyj

É uma forma bem “Bruteforce” de ‘ordenar’ valores lidos, se bem que quando eu não conhecia AND e OR eu fazia da mesma forma. Como o numero de ifs é proporcional ao fatorial do numero de termos, urge pesquisar algum algoritmo de ordenação, senão para fazer o mesmo programa para ordenar 4 ou mais numeros vai dar tendinite.

Se vc se sentir apto, pesquise sobre ordenação bolha ou os próprios metodos de ordenamento do java.

http://www.java2s.com/Code/Java/Collections-Data-Structure/SimpleSortDemo.htm

Se vc terminar o seu programa com os && e || necessários, vc ja aprendeu a trabalhar com ifs, agora é só evoluir na medida do possivel :wink:

Veja só:
http://www.java2s.com/Code/Java/Collections-Data-Structure/SortingSearchingandInsertingintoasortedarray.htm

peczenyj

mesmo a resposta sendo boolean o resultado pode sair numerico…

Java não é como C. Java possui o tipo booleano. se vc fizer

if(true)

if(1 > 0)

if(0)

as duas primeiras formas estão corretas, porém a terceira não. C (e C++ se não me engano) podem lidar de uma forma matemática com estas questões justamente por não haver um tipo booleano.

Não existe uma forma de usar operadores e métodos de comparação <, >, ==, !=, <=, >=, String.equals(…), e isto retornar um valor numérico (ou não booleano). Seria o mesmo que vc fazer C = A + B, onde A B e C são inteiros e o resultado sair uma URL.

David

Filipe Cruz:
mesmo a resposta sendo boolean o resultado pode sair numerico…
Não, não pode. Um boolean é um boolean, um valor numérico é um valor numérico. Não é possível comparar duas coisas de naturezas distintas.

Filipe_Cruz

import java.util.Scanner;

public class ResultadoCalculo
       {

           public static void main (String args[])
           {
     
               Scanner input = new Scanner (System.in);

               int numero1;
               int numero2;
               int numero3;
               int soma;
               int media;
               int produto;
               
                 System.out.print ("Entre com o primeiro numero inteiro de sua preferencia ");
                  numero1 = input.nextInt();
                 
                 System.out.print ("Entre com segundo numero inteiro de sua preferencia ");
                  numero2 = input.nextInt();

                 System.out.print ("Entre com terceiro numero inteiro de sua preferencia ");
                  numero3 = input.nextInt();

                     soma = numero1 + numero2 + numero3;

                       System.out.printf ("Resultado da soma is %d\n", soma);

                     media = (numero1 + numero2 + numero3)/3;
                                           
                       System.out.printf ("Resultado da media is %d\n", media);

                     produto = numero1 * numero2 * numero3;

                       System.out.printf ("Resultado do produto is %d\n", produto);

                    if ( numero1 > numero2 > numero3 )
                       
                       System.out.printf ("maior numero is %d\nmenor numero is %d\nmenor numero is %d\n", numero1, numero2, numero3);
                  
                    if ( numero1 > numero3 > numero2 )

                       System.out.printf ("maior numero is %d\nmenor numero is %d\nmenor numero is %d\n", numero1, numero3, numero2);
                      
                    if ( numero2 > numero1 > numero3 )

                       System.out.printf ("maior numero is %d\nmenor numero is %d\nmenor numero is %d\n", numero2, numero1, numero3);

                    if ( numero2 > numero3 > numero1 ) 

                       System.out.printf ("maior numero is %d\nmenor numero is %d\nmenor numero is %d\n", numero2, numero3, numero1);
                   
                    if ( numero3 > numero1 > numero2 )
               
                       System.out.printf ("maior numero is %d\nmenor numero is %d\nmenor numero is %d\n", numero3, numero1, numero2);       
                        
                    if ( numero3 > numero2 > numero1 )
                  
                       System.out.printf ("maior numero is %d\nmenor numero is %d\nmenor numero is %d\n", numero3, numero2, numero1);

O java diz que todos os segundos operadores (" >" ) são de um tipo boolean mas declarei a variavel como int. porq ñ consigo compilar esse aplicativo… ??
Vces tem a solução pra isso ñ acontecer mais ???
Por favor … vai ser uma grande ajuda…

EDIT - síntese != sintaxe.

Filipe_Cruz

AHHHHHHHHHHH esqueci de colocar, mas ñ que esse seja o problema, pois eu soh esqueci de copiar…

}

  }
Filipe_Cruz

David:
Você não pode fazer comparação de três variáveis desse jeito. Teria que fazer isso:

if ( (numero1 > numero2) && (numero2 > numero3) ) { // ... }Ou seja, se numero1 for maior que numero2 e numero2 for maior que numero3…

Ele deu esse erro do boolean pelo seguinte motivo, Quando você fez isso:

if (numero1 > numero2 > numero3) { ... }Primeiro ele avaliou o resultado de numero1 > numero2 e isso é um boolean (true ou false) e depois ele comparou esse resultado (que é boolean) com numero3, mas não é possível comparar boolean com int, entendeu?

Quando eu faço da maneira certa, como eu mostrei mais acima, eu comparo numero1 com numero2, que dá um boolean, comparo numero2 com numero3, que dá outro boolean e depois eu faço o AND de dois booleans, o que é válido.

mas o problema eh que o resultado das seguintes comparações tem que ser resultados numéricos, ou seja, fornecer ao usuario os menores e os maiores numeros fornecidos pelo o usuario e possibilitar que ele veja isso…
mesmo a resposta sendo boolean o resultado pode sair numerico…
[ nota ] estou usando os exercicios do DEITEL: Java como programar edição 6º…

Filipe_Cruz

peczenyj:
É uma forma bem “Bruteforce” de ‘ordenar’ valores lidos, se bem que quando eu não conhecia AND e OR eu fazia da mesma forma. Como o numero de ifs é proporcional ao fatorial do numero de termos, urge pesquisar algum algoritmo de ordenação, senão para fazer o mesmo programa para ordenar 4 ou mais numeros vai dar tendinite.

Se vc se sentir apto, pesquise sobre ordenação bolha ou os próprios metodos de ordenamento do java.

http://www.java2s.com/Code/Java/Collections-Data-Structure/SimpleSortDemo.htm

Se vc terminar o seu programa com os && e || necessários, vc ja aprendeu a trabalhar com ifs, agora é só evoluir na medida do possivel :wink:

Veja só:
http://www.java2s.com/Code/Java/Collections-Data-Structure/SortingSearchingandInsertingintoasortedarray.htm

valeu pela dica… vai ser de grande valia, mas ainda nem cheguei em arrys…

Criado 25 de abril de 2006
Ultima resposta 26 de abr. de 2006
Respostas 7
Participantes 3