Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

379
Vistas
¿Puedo usar una cadena en una declaración de cambio y usar .contains() con Java?

Estoy tratando de escribir un programa que reproduzca una versión recortada del juego de cartas Spades, y me gustaría hacer que mi código sea más eficiente mediante el uso de una declaración de cambio en lugar de repetir if/else if/else. Necesito que la función tome una cadena (tarjeta de usuario), que se parece a "Picas, 2" o "Diamantes, 6". Lo necesito para guardar el número al final de la cadena en un tipo de datos int. A continuación se muestran las declaraciones de trabajo if/else if/else.

 public static int getUserValue(String userCard) { int userValue = 0; if (userCard.contains("4")) { userValue = 4; } else if (userCard.contains("5")) { userValue = 5; } else if (userCard.contains("6")) { userValue = 6; } else if (userCard.contains("7")) { userValue = 7; } else if (userCard.contains("8")) { userValue = 8; } else if (userCard.contains("9")) { userValue = 9; } else if (userCard.contains("10")) { userValue = 10; } else if (userCard.contains("11")) { userValue = 11; } else if (userCard.contains("12")) { userValue = 12; } else if (userCard.contains("13")) { userValue = 13; } else if (userCard.contains("1")) { userValue = 1; } else if (userCard.contains("2")) { userValue = 2; } else if (userCard.contains("3")) { userValue = 3; } return userValue; }

Así que pensé que podría hacer algo como

 public static int getUserValue(String userCard) { int userValue = 0; switch (userCard){ case userCard.contains("4"): userValue = 4; break; } //etc, goes up to 13 then evaluates if 1, 2, 3. return userValue; }

Da un error que no puedo convertir de booleano a cadena. ¿Hay alguna manera de que pueda cambiar esto o escribirlo para que funcione de la manera que quiero?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En su lugar, debe usar algo como una clase UserCard :

 public class UserCard { private Suit _suit; private int _value; // Constructor // getter + setter } public enum Suit { DIAMONDS, HEARTS, SPADES, CLUBS; }

De esa manera, ni siquiera necesita el interruptor porque ya tiene ese valor que desea extraer. Su getUserValue es simplemente:

 public static int getUserValue(UserCard userCard) { return userCard.getValue(); }
over 4 years ago · Santiago Trujillo Denunciar

0

Para responder a la pregunta apenas como se hace, no, no puede usar el interruptor como le gustaría en su ejemplo.

Los casos de un interruptor tienen que ser constantes. Puede usar valores literales, campos finales estáticos u operadores para combinarlos; pero no llamar a un método. Entonces, por ejemplo, el case 1+2 es válido así como el case A+B , incluso cuando A y B son cadenas.

Sin embargo, hay una mejor manera de extraer el valor de su cadena, usando String.indexOf, String.substring e Integer.parseInt, o expresiones regulares para cosas más complejas. O, mejor aún, siga otras respuestas que sugieren crear una clase de tarjeta.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda