Calcular preco Hotel com desconto em JAVA

Boa tarde,
Estou com uns problemas no meu programa…

“Um hotel concebeu uma forma original de cobrar aos seus clientes. A primeira noite custa 50 Euros,
a segunda 25 Euros (50/2), a n-ésima custa 50/n Euros.
Calcule a cobrança a efetuar a um cliente que ficou n noites no hotel (preço a pagar por noite e o total)”

public static void main(String[] args) {
   
    Scanner sc = new Scanner(System.in);
    System.out.print("Introduza o numero de noites da sua reserva : ");
    int noDias = sc.nextInt();
    int amt = 0;
    if (noDias <= 1)
        amt = noDias * 50;
    else if (noDias <= 2)
        amt = 2 * 50 + ((noDias -4) * 50);
    else if (noDias <= 9)
        amt = 3 * 350 + 3 * 300 + ((noDias - 6) * 275);
    else
        amt = 3 * 350 + 3 * 300 + 3 * 275 + ((noDias - 9) * 225);
    
    sc.close();
    System.out.println("Numero de noites dormidas: " + noDias);
    System.out.println("Preco Total a pagar: " + amt);

}
}

Mas como calcular para n noites o preco total?

Obrigado
Miguel Amaro

Vc faria algo assim usando um loop:

public class App {
  public static void main(String... args) {
    double precoInicial = 50;

    int quantidadeDeNoites = 5;

    double precoFinal = precoInicial;

    System.out.printf("Preço da 1ᵃ noite: €%.2f\n", precoFinal);

    for (int i = 2; i <= quantidadeDeNoites; i++) {
      double precoDaNoite = precoInicial / i;

      System.out.printf("Preço da %dᵃ noite: €%.2f\n", i, precoDaNoite);

      precoFinal += precoDaNoite;
    }

    System.out.printf("Preço total: €%.2f\n", precoFinal);
  }
}
2 curtidas

Certo, mas no caso de “n” noites o preco seria 50/n…
Como por no programa?
Usando If e else…

Obrigado pela ajuda!

if e else não são adequados para este problema porque vc não sabe quantas noites o hóspede vai ficar.

Imagine que ele vai ficar 1000 noites, vc teria que criar 1000 condições e isto é inviável.

De qualquer forma, daria para fazer usando apenas if. Seria algo assim:

public class App {
  public static void main(String... args) {
    double precoInicial = 50;

    int quantidadeDeNoites = 0;

    double precoFinal = 0;

    if (quantidadeDeNoites > 0) {
      precoFinal = precoInicial;
      System.out.printf("Preço da 1ᵃ noite: €%.2f\n", precoInicial);
    }

    if (quantidadeDeNoites > 1) {
      double precoDaNoite = precoInicial / 2;
      precoFinal += precoDaNoite;
      System.out.printf("Preço da 2ᵃ noite: €%.2f\n", precoDaNoite);
    }

    if (quantidadeDeNoites > 2) {
      double precoDaNoite = precoInicial / 3;
      precoFinal += precoDaNoite;
      System.out.printf("Preço da 3ᵃ noite: €%.2f\n", precoDaNoite);
    }

    if (quantidadeDeNoites > 3) {
      double precoDaNoite = precoInicial / 4;
      precoFinal += precoDaNoite;
      System.out.printf("Preço da 4ᵃ noite: €%.2f\n", precoDaNoite);
    }

    if (quantidadeDeNoites > 4) {
      double precoDaNoite = precoInicial / 5;
      precoFinal += precoDaNoite;
      System.out.printf("Preço da 5ᵃ noite: €%.2f\n", precoDaNoite);
    }

    System.out.printf("Preço total: €%.2f\n", precoFinal);
  }
}
2 curtidas

Sim, e isso. Muito obrigado pela ajuda!

1 curtida

Mas por que vc quer fazer esse monte de if e else? Se vc não sabe a quantidade - e pelo jeito pode ser qualquer valor - o mais adequado (sensato, correto, sem gambiarra, etc) é usar um loop, como já foi sugerido.