0

En este código tengo la variable descuento, la cual esta inicializada con valor 0 y lo que quiero es que mediante el if cambie de valor y usar el nuevo valor en entrada.

import java.util.*;
public class foro_cal_1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("============================================");
        System.out.println("ENTRADA PARA CINE");
        System.out.println("Que dia es hoy: ");
        String dia = sc.nextLine();
        System.out.println("Coloque su edad: ");
        int edad = sc.nextInt();
        sc.close();
        double descuento = 0;
        if (dia == "martes" && edad<25) {
            descuento = 12 * 0.25;
        }
        else if (dia == "miercoles" && edad > 60) {
            descuento = 12*0.4;
        }
        else if (dia == "jueves") {
            descuento = 12*0.2;
        }

        double entrada = 12 - descuento;
        System.out.println("El costo de la entrada es de: " + entrada);
        System.out.println("============================================");
        
 
    }
}

Gracias por las respuestas.

Aldo Ramos
  • 29
  • 2

2 Answers2

0

El problema está en la forma en la que comparas las cadenas. En java las cadenas se comparan con la función equals, quedando así:

if (dia.equals("martes") && edad < 25)
Lobos
  • 14,463
  • 3
  • 9
  • 28
0

Para comparar una cadena debes usar la función equals() y no el operador ==. Como estas usando el operador ==, esta es la razón por la cual no entra en las validaciones.

revisa:

¿Cómo comparar correctamente Strings (y objetos) en Java?

Realiza el siguiente cambio en tu código para que funcione correctamente:

      Scanner sc = new Scanner(System.in);

    System.out.println("============================================");
    System.out.println("ENTRADA PARA CINE");
    System.out.println("Que dia es hoy: ");
    String dia = sc.nextLine();
    System.out.println("Coloque su edad: ");
    int edad = sc.nextInt();
    sc.close();
    double descuento = 0;
    if (dia.equals("martes") && edad<25) {
        descuento = 12 * 0.25;
    }
    else if (dia.equals("miercoles") && edad > 60) {
        descuento = 12*0.4;
    }
    else if (dia.equals("jueves")) {
        descuento = 12*0.2;
    }

    double entrada = 12 - descuento;
    System.out.println("El costo de la entrada es de: " + entrada);
    System.out.println("============================================");

Como @Benito-B comenta, una buena practica para evitar NullPointerException puedes realizar la comparación de esta forma

   ...
   ...
   if ("martes".equals(dia) && edad<25) {
        descuento = 12 * 0.25;
    }
    else if ("miercoles".equals(dia) && edad > 60) {
        descuento = 12*0.4;
    }
    else if ("jueves".equals(dia)) {
        descuento = 12*0.2;
    }
    ...
    ...
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • De hecho, lo correcto de todo sería `"martes".equals(dia);` para evitar NPE. Así si en algún momento la variable está a null no va a dar error. Asumo que tú lo sabes, jorge, pero así lo ve el OP también! Nunca está de más ir acostumbrándose a hacer null checks desde el principio – Benito-B Aug 03 '21 at 18:19
  • Eso lo agregaré como "plus" en la pregunta, es valioso como dices saberlo desde que inicias. @Benito-B – Jorgesys Aug 03 '21 at 18:23