Foro

Ayuda con Java!

Otros lugares, otras opciones :: Sin clasificar :: Ayuda con Java!

Este hilo ha sido cerrado.
14/04/2020, 09:53

Buenas gente. Hace un tiempo encontré una pagina que te enseña a programar desde cero y gratis, (no la he enviado por aquí porque solo está disponible para los que están matriculados en una escuela de mi provincia/estado).

Cuestión que haciendo los ejercicios me tocó entrar a las funciones de java, y acá es donde tengo la duda.

El jurado de un torneo nos pidió que desarrollemos una función medallaSegunPuesto que devuelva la medalla que le corresponde a los primeros puestos, según la siguiente lógica:

  • primer puesto: le corresponde "oro"
  • segundo puesto: le corresponde "plata"
  • tercer puesto: le corresponde "bronce"
  • otros puestos: le corresponde "nada"

Ejemplo:

medallaSegunPuesto(1)
"oro"
 medallaSegunPuesto(5)
"nada"

Hasta aquí todo entendible. pero cuando armo la función empieza el lio.

function medallaSegunPuesto(N) {
  return (N==1, "oro") ; (N==2, "plata") ; (N==3, "bronce") ; (N>3, "nada")
}

el problema es que cuando pruebo la funcion ocurre:

medallaSegunPuesto(1)

oro

medallaSegunPuesto(2)

oro

Y así con todos. Hace tres días que vengo con este problema y no puedo resolverlo, Agradezco a cualquiera que pueda darme una mano.

dejo la pagina por si alguien mas puede acceder.

https://mumuki.io/paths

14/04/2020, 10:33

Hace tiempo que no toco javascript por lo que a lo mejor alguien ve algo que a mi se me escapa. 

Por lo que veo no se esta ejecutando nada posterior al return.

return (N==1, "oro") ; Esto devolvería si no me equivoco true/false (dependiendo si se cumple o no la condición), "oro"  en todos los casos y ahí se acaba la ejecución no hay condicionamiento.

Una opción es generar una variable.

Var medalla = "nada"

y luego evaluar el N para poner el metal que te interesa

if(condicion)

{

medalla = ...

}

Para despues devolverla con un return.

14/04/2020, 10:54

O abreviando:

return N==1?'oro':N==2?'plata':N==3?'bronce':'agua';

Sintaxis:  [Condición] ? [lo que devuelve si true] : [lo que devuelve si false]

... y en la rama del false, encadenamos lo que devolvería en tal caso, quedando de ese modo que ves... las 3 condiciones del tirón, y para terminar, lo que devuelve si no se cumple ninguna de las anteriores

Personalmente, soy más de los ifs.... llamadme vintage, que viejuno no tiene tanto glamour

 

14/04/2020, 11:09

Si, también puedes quitar la variable medalla y poner un return dentro del cada if. 

Puse la opción que me pareció más sencilla y fácil de entender.

14/04/2020, 11:31

Te recomiendo Switch Case. Es.lo.mas claro

14/04/2020, 12:54
Editado: 14/04/2020, 13:16

Pues yo también soy un fanático de las condicionales con "si" lógicos y "si no" lógicos, pero el tema es que si se puede resolver sin usar if, debemos resolverlo sin usar if (es como pedirle a picasso que no use el color rojo...)

Edit:acaso de leer Switch case, me siento como los españoles cuando descubrieron América jaja, lo malo es que todavía no llegó a esa parte :/

14/04/2020, 13:35

No estoy muy metido, pero parece una cuestión "simple" de sintaxis. El responsable pareciera ser el ";" después del return, que indica el final de la instrucción, terminando la función en return (N==1, "oro") ;.
PijusMaximus lo resolvió con ":".

14/04/2020, 15:02

Si no puedes usar ifs lo más normal es que este pensado para que tampoco uses case o ternarios.

Sin tener claro que puedes utilizar otra opción valida sería crear un enumerado. Te paso un ejemplo que encontre por internet un poco retocado para que se parezca a lo que quieres hacer.

 

var SizeEnum = {
  SMALL: 1,
  MEDIUM: 2,
  LARGE: 3,
  properties: {
    1: {name: "small", value: 1},
    2: {name: "medium", value: 2},
    3: {name: "large", value: 3}
  }
};

var mySize = SizeEnum.MEDIUM;
var myCode = SizeEnum.properties[mySize].name; // myCode == "medium"

 

14/04/2020, 21:28

Solo para asegurar que el error esta en ese punto, pide que te devuelva el valor de N junto al resultado (oro, plata, bronce, nada, agua, gracias por participar, etc) y ya que este corriendo bien quitas el valor de N.

Estoy muy oxidado para poder dar un buen consejo, pero es un pequeño punto en el que puedo apollar, espero lo puedas solucionar pronto.

14/04/2020, 21:43

Eso no es java, es javascript, que tienen nombre parecidos pero no se parecen demasiado :)

Ya te han dado respuestas más que válidas. Yo soy de los switch porque quedan más claro pero si tiene que ser sin condicionales la única manera de sacarlo es o con el operador ternario ?. Hay más maneras como chequear contra un enum, crearte un diccionario con los valores para oro, plata y bronce y en caso que no esté en el diccionario devolver nada, maneras de rizar el rizo y matar moscas a cañonazos las hay por doquier :D

Por lo que dices (momento en el que estás del curso), creo que buscan la solución del operador ternario ? que probablemente son de las primeras cosas que enseñan junto a los operadores matemáticos y lógicos.

Suerte, será la primera de las muchas frustraciones que tendrás si programas..... aunque también hay días buenos .D

15/04/2020, 11:20

Si... los fines de semana.

15/04/2020, 22:55

Jajajaja, bueno, ¡gracias a todos!

El viernes (cuando tengo tiempo para programar) voy a probar switch case y a ver que tal. Gracias por tomarse el tiempo de ayudarme.

Este hilo ha sido cerrado.