Calificaciones (Es el tema del ejercicio mi post) con instrucción " if "

Hola compañeros javeros les saludo antes de todo, estoy elaborando un ejercicio el cual crei sencillo de realizar, en verdad les parecera sencillo a varios de ustedes pero como lo he comentado con anterioridad estoy algo verde en las cuestiones "Java".
Quise hacer un ejercicio en donde a traves de una ventana ingrese calificaciones, dando como resultado los diferentes resultados de esta, y las diferentes variaciones con notacion binaria como los son; >, <, ==, >=, <= y !=.
Les comparto el siguiente codigo ya que he intentado diferentes maneras de corregir pero los errores me los sigue marcando dentro de las Instrucciones " if " solamente.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author DELL 1
 */

import javax.swing.JOptionPane;

public class Calificaciones {
   
    public static void main (String arg []){
       
     String primerCalificacion;
     String segundaCalificacion;
     String tercerCalificacion;
     String cuartaCalificacion;
     String resultado = null;
             
     
     int calificacion1,calificacion2,calificacion3,calificacion4;
     
     primerCalificacion = JOptionPane.showInputDialog("Ingrese la Primer Calificacion:");
     
     segundaCalificacion = JOptionPane.showInputDialog("Ingrese la Segunda Calificacion:");
     
     tercerCalificacion = JOptionPane.showInputDialog("Ingrese la Tercer Calificacion:");
     
     cuartaCalificacion = JOptionPane.showInputDialog("Ingrese la Cuarta Calificacion:");
     
     calificacion1 = Integer.parseInt(primerCalificacion);
     
     calificacion2 = Integer.parseInt(segundaCalificacion);
     
     calificacion3 = Integer.parseInt(tercerCalificacion);
     
     calificacion4 = Integer.parseInt(cuartaCalificacion);
     
     resultado = " " ;
     
     // la primer parte del programa si funciona, se ingresan las calificaciones pero no realiza la operacion binaria
     
     //desde aqui empiezan a marcar errores solamente con la intruccion " if "
     
     if (calificacion1 > calificacion2 (calificacion3 > calificacion4))

        resultado = resultado + calificacion1 + " > " + calificacion2 + " > " + calificacion3 + " > " + calificacion4;

     if (calificacion1 < calificacion2(calificacion3 < calificacion4))

         resultado  = resultado + calificacion1 + " < " + calificacion2 + " < " + calificacion3 + " < " + calificacion4;

     if (calificacion1 == calificacion2(calificacion3 == calificacion4))

         resultado = resultado + calificacion1 + " == " + calificacion2 + " == " + calificacion3 + " == " + calificacion4;

     if (calificacion1 != calificacion2(calificacion3 != calificacion4))

         resultado = resultado + calificacion1 + " != " + calificacion2 + " != " + calificacion3 + " != " + calificacion4;

if (calificacion1 >= calificacion2 (calificacion3 >= calificacion4))

    resultado = resultado + calificacion1 + " >= " + calificacion2 + " >= " + calificacion3 + " >= " + calificacion4;

   if (calificacion1 <= calificacion2 (calificacion3 <= calificacion4))

       resultado = resultado + calificacion1 + " <= " + calificacion2 + " <= " + calificacion3 + " <= " + calificacion4;

     JOptionPane.showMessageDialog(null, resultado,"Resultado de la Comparacion",JOptionPane.PLAIN_MESSAGE);

     System.exit(0);
                 
       
    }
               
    }

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Tienes que aprender a leer los mensajes de error.

Un compilador te dice donde estan tus errores. Como un compilador es finalmente un programa, no te puede dar una descripción muy "humana" de que está mal, pero al fin y al cabo te dice algo.

El compilador de Java es es muy bueno reportando los errores, pero hay que aprender a leer sus mensajes, una vez dominando esto, puedes resolver estos problemas tu mismo.

Aquí te van los que me salen de compilar tu código:

$ javac Calificaciones.java
Calificaciones.java:45: cannot find symbol
symbol  : method calificacion2(boolean)
location: class Calificaciones
     if (calificacion1 > calificacion2 (calificacion3 > calificacion4))
                         ^
....

Salen muchos otros similares, pero veamos que dice esto:

$ javac Calificaciones.java
Calificaciones.java:45: cannot find symbol

Dice que en el archivo "Calificaciones.java" en la linea 45 no puede encontrar un simbolo. Esto significa que una clase, o una variable o algún método que tu le estás diciendo no existe ( o al menos el compilador, no sabe donde está, o como el mismo dice, "no lo puede encontrar" )

symbol  : method calificacion2(boolean)

Aquí te dice exactamente que es lo que no puede encontrar. Te dice: El símbolo que no encuentro es un método que se llama "calificacion2" y recibe como parametro un boleano
.

 
location: class Calificaciones
     if (calificacion1 > calificacion2 (calificacion3 > calificacion4))
                                    ^

Aquí incluso te dice en que parte de la linea 45 está este simbolo que no encuentra ( para que sea más fácil encontrarlo )

En java, cuando llamas un método se ve así:

nombreMetodo( argumentos );

Por ejemplo estás llamando a un método de forma válida en:

Integer.parseInt(primerCalificacion)

Estas llamando el método "parseInt" que recibe un string que se llama "primerCalificacion"

Si vemos de nuevo la linea donde manda el mensaje de error dice:

calificacion2( calificacion3 > calificacion 4 )

Un humano se puede dar cuenta que eso no es un método, sino que estabas queriendo comparar cual de todos los valores era el mayor.

En Java ( y en la mayoría de los lenguajes de programación ) solo puedes compara un valor con otro a la vez ( solo en Python que yo recuerde puedes comparar varios a la vez ) Por lo tanto si quieres comparar si calif1 > calif 2 > calif3 > calif4

Lo que tienes que escribir es:

   if( calif1 > calif2 && calif2 > calif3  && calif3 > calif4 ) {
   ....

Ese operador "&&" se llama "and" ( Y ) y sirve para unir dos expresiones boleanas ( que regresan cierto o falso ); lo anterior se leería: "calif1 es mayor que calif 2 Y calif2 es mayor que calif3 Y calif3 es mayor que calif4"

Esto parece redundante, y de hecho lo es, tener que decirle varias veces, "y que este es mayor que el otro Y que el otro es mayor" etc. pero así es como se diseño este lenguaje. No es que esté mal, o que esté bien, simplemente, así es como es, y hay que aprenderlo.

Por ejemplo en un lenguaje como python lo siguiente es válido:

a,b,c,d = 8,6,4,2
if  a > b > c > d :
    print "'a' es mayor que todos"

Una vez más, no es que por esto ya sea mejor, simplemente es diferente.

En conclusión

Tienes modificar el resto de las comparaciones para que funcione correctamente comparando dos elementos a la vez y uniendolos con otros operadores binarios ( que reciben dos operandos )

ejemplo:

if( a < b && b < c && c < d ) {
// a es menor que todos
}

Etc.

Es MUCHO muy importante, que te acostumbres a usar llaves SIEMPRE después de los if's . Hay quién no los usa y puede ser válido ( lease allá ellos ) , pero a mi me parece mala idea, e incluso lenguajes nuevo ( como Go ) te obligan a usarlo. Entonces tus ifs deben de ser así aunque sean de una sola línea:

if( condicion ) {
    accion;
 }

Java te deja no hacerlo, pero yo te recomiendo, que los uses SIEMPRE!!!!

Ahora intenta aplicar lo que te expliqué acá

Y tendrás un código mucho más compacto.

Imagen de tHe pLuCkY

Gracias !!

Hola Oscar pues de antemano te agradezco mucho tu tiempo, y sobre lo que me comentas dentro de tu explicación, es muy entendible la verdad me hiciste pensar mas en cuestión de las correcciones que manejare dentro este código, otra cosa y creo que la mas importante es poder saber que son algunos de los detalles que encontré y que me marcan error, los pude diferenciar pero no los había podido descifrar de tal manera como lo hiciste tu quiza por la falta de experiencia pero con esos maestros, con los que cuento pronto podre realizarlos sin ningun problema.
La pregunta que te haré es la siguiente y con relacion a tu conclusion que manejas, el codigo que manejare para la correccion lo elaborare de la siguiente manera;

 if (calificacion1 < calificacion2 && calificacion2 < calificacion3 && calificacion3 < calificacion4){
resultado  = resultado + calificacion1 + " < " + calificacion2 + " < " + calificacion3 + " < " + calificacion4;
}

La llave cierra terminando la primer instruccion " if "?? o sigue abierta hasta el final de las instrucciones " if " o cuando terminen los 6 operadores binarios. O en cada Intruccion pondre la llave y la cierro cuando esta termine su operacion?.
En la linea 47 cuando empiezo con los resultados, si maneje bien la operacion??

 resultado  = resultado + calificacion1 + " < " + calificacion2 + " < " + calificacion3 + " < " + calificacion4;
}

La llave cierra terminando

La llave cierra terminando la primer instruccion " if "?? o sigue abierta hasta el final de las instrucciones " if " o cuando terminen los 6 operadores binarios. O en cada Intruccion pondre la llave y la cierro cuando esta termine su operacion?.

Depende. Lo más logico es que cierra inmediatamente que haga lo que quieres hacer ( darle un valor a la variable resultado ) y cierre.

Puedes usar if/else si quieres hacer pruebas excluyentes, en cuyo caso podrias poner por ejemplo

Animal animal = .... // sacar un animal de algun lado

if( animal.esMamifero() ) {
     // hacer algo
} else if(  animal.esOviparo() ) {
    // hacer otra cosa
}

Aqui se está comparando algo que puede ser de una forma o de otra, pero no de las dos. Esta me parecería la forma más lógica.

Otra forma es cerrando la llave esta el final, pero ten en cuenta que aquí la lógica es, ver si una condición se cumple, y de ser así ver si se cumple "otra" condición.

Otra vez el ejemplo:

Animal animal = ...
if( animal.esMamifero() ) {
    if( animal.esFelino() ) {
          if( animal.haceMiua() ) {
                // el animal es un gato :)
          }
    }
}

Nota que aquí la primera llave cierra hasta el final, pero para que se ejecute el segundo if, el primero debe de haber sido verdadero ( por que el segundo if es parte del "cuerpo" del primer if.

No está demás que lo anterior podría haber sido escrito como:

if( animal.esMamfero() && animal.esFelino() && animal.haceMiau() ) {
     // el animal es un gato
}

Regresando a tu pregunta. Me parece que lo que quieres hacer es

if( condicionUno ) {
 ....
} else if ( condicionDos ) {
} else if ( condicionTres ) {
} etc. etc.

En la linea 47 cuando empiezo con los resultados, si maneje bien la operacion??
Si lo que quieres es crear un mensaje que diga algo como:

"null 3 < 4 < 5 < 6"

Entonces si. Si no es lo que quieres, modifica tu código para que te salga lo que necesitas. En terminos de sintaxis / estilo de Java, me parece que está bien.

Sigue haciendo pruebas y me dices si te atoras.

Imagen de tHe pLuCkY

Excelente

Buen día Oscar solo te escribo para darte las gracias por el tiempo que dedicas a personas que apenas empezamos a empaparnos en java si el error que me marcaba tenia que ver con las "and" o " && " de hecho esto es algo que tendré muy encuentra para futuros ejercicios, una parte muy significativa es que yo no cuento con algún profesor solo con mi libro " Como programar en Java" y los consejos que recibo de gente como tu y algunos mas de esta comunidad,, ""Gracias ""
A continuación solo te escribo parte del código en el cual se encontraba mi error, pero ya corregido:

 
if (calificacion1 > calificacion2 && calificacion2 > calificacion3 && calificacion3 < calificacion4) {
  resultado = resultado + calificacion1 + " > " + calificacion2 + " > " + calificacion3 + " > " + calificacion4;
}

if (calificacion1 < calificacion2 && calificacion2 < calificacion3 && calificacion3 < calificacion4) {
  resultado  = resultado + calificacion1 + " < " + calificacion2 + " < " + calificacion3 + " < " + calificacion4;
}

if (calificacion1 == calificacion2 && calificacion2 == calificacion3 && calificacion3 == calificacion4) {
  resultado = resultado + calificacion1 + " == " + calificacion2 + " == " + calificacion3 + " == " + calificacion4;
}

if (calificacion1 != calificacion2 && calificacion2 != calificacion3 && calificacion3 != calificacion4) {
  resultado = resultado + calificacion1 + " != " + calificacion2 + " != " + calificacion3 + " != " + calificacion4;
}

if (calificacion1 >= calificacion2 &&  calificacion2 >= calificacion3 && calificacion3 >= calificacion4) {
  resultado = resultado + calificacion1 + " >= " + calificacion2 + " >= " + calificacion3 + " >= " + calificacion4;
}

if (calificacion1 <= calificacion2 && calificacion2 <= calificacion3 && calificacion3 <= calificacion4) {
  resultado = resultado + calificacion1 + " <= " + calificacion2 + " <= " + calificacion3 + " <= " + calificacion4;
}

JOptionPane.showMessageDialog(null, resultado,"Resultado de la Comparacion",JOptionPane.PLAIN_MESSAGE);
System.exit(0);