Division into different methods

0

I'm learning in college to split the system into different methods each running a function. However I had a problem with the following code:

import java.util.Scanner;
public class Sistema_Bichara{
    public static int Menu(){
        Scanner in = new Scanner(System.in);
        System.out.println("Digite o o número referente ao tamanho da pulseira\n1.Pequena (17cm) - R$180,00\n2.Média (18cm) - R$200,00\n3.Grande (20cm) - R$240,00\n4.Sair");
        int digita = in.nextInt();
        return digita;
    }
    public static double valorPulseira(int digita){
        double valor = 0;
        switch(digita){
            case 1:
            valor += 180;
            System.out.println("Total: R$180,00\nAgora escolha o(s) pingente(s):");
            break;
            case 2:
            valor += 200;
            System.out.println("Total: R$200,00\nAgora escolha o(s) pingente(s):");
            break;
            case 3:
            valor += 240;
            System.out.println("Total: R$240,00\nAgora escolha o(s) pingente(s):");
            break;
        }
        return valor;
    }
    public static int tamanhoPulseira(int digita){
        int tamanhopulseira = 0;
        switch(digita){
            case 1:
            tamanhopulseira = 17;
            break;
            case 2:
            tamanhopulseira = 18;
            break;
            case 3:
            tamanhopulseira = 20;
            break;
        }
        return tamanhopulseira;
    }
    public static int menuAcessorio(){
        System.out.println("1.Bichinhos (1,3cm) - R$225,00\n2.Bonequinhos (1,5cm) - R$185,00\n3.Berloques (0,5cm) - R$200,00\n4.Cubinhos (1cm) - R$190,00\n5.Rolinho (2cm) - Prata, Pedra e Esmaltados\n6.Ir para o pagamento");
        Scanner in = new Scanner(System.in);
        int digita2 = in.nextInt();
        return digita2;
    }
    public static double suporte(double valor){
    Scanner in = new Scanner(System.in);
    System.out.println("\nDeseja adquirir um suporte de segurança pelo preço de R$95,00?\n1.Sim\n2.Não");
    int digita = in.nextInt();
    if(digita == 1){
        valor += 95;
    }
    return valor;
   }
   public static int menuPagamento(){
       System.out.println("\nA loja oferece os seguintes tipos de pagamento:");
       System.out.println("\n1. À vista com 5% de desconto");
       System.out.println("\n2. 3 vezes no cartão sem acrescimos");
       System.out.println("\n3. 5 vezes no cartão com acresimo de 10% no preço total");
       System.out.println("\n4. 10 vezes no cartão com acresimo de 20% no preço total");
       System.out.println("\nDigite o número da forma de pagamento escolhida.");
       Scanner in = new Scanner(System.in);
       int digita3 = in.nextInt();
       return digita3;
    }
   public static double pagamento(double valor, int digita3){
    Scanner in = new Scanner(System.in);
    double pagar = 0;
    double valor2 = 0;
    switch(digita3){
        case 1:
        valor = valor*0.95;
        break;
        case 2:
        pagar = valor/3;
        break;
        case 3:
        valor2 = (valor*110)/100;
        pagar = valor2/5;
        break;
        case 4:
        valor2 = (valor*120)/100;
        pagar = valor2/10;
        break;
    }
    //Condição para mostrar o valor total de acordo com o pagamento escolhido
    if (digita3 == 3){
        System.out.println("\nO valor total da compra ficou de: R$" +valor2);
    } else if (digita3 == 4){
        System.out.println("\nO valor total da compra ficou de: R$" +valor2);
    } else {
        System.out.println("\nO valor total da compra ficou de: R$" +valor);
    }
    //Condição para mostrar o valor total e o valor das parcelas se a pessoa escolheu parcelado
    if(digita3 == 2){
    System.out.println("\nForma de pagameto: 3 parcelas de R$" +pagar);
    System.out.println("\nA loja aceita os seguintes cartões:\n1.Visa\n2.MasterCard\n3.Rede Shop\n4.American Express\n5.Hipercard\n6.Diners Club International");
    int digita = in.nextInt();
    }  else if(digita3 == 3){
    System.out.println("\nForma de pagameto: 5 parcelas de R$" +pagar);
    System.out.println("\nA loja aceita os seguintes cartões:\n1.Visa\n2.MasterCard\n3.Rede Shop\n4.American Express\n5.Hipercard\n6.Diners Club International");
    int digita = in.nextInt();
    }else if(digita3 == 4){
    System.out.println("\nForma de pagameto: 10 parcelas de R$" +pagar);
    System.out.println("\nA loja aceita os seguintes cartões:\n1.Visa\n2.MasterCard\n3.Rede Shop\n4.American Express\n5.Hipercard\n6.Diners Club International");
    int digita = in.nextInt();
    }
    System.out.println("\nObrigado por comprar conosco!");
    return valor;
}
public static void main(String args[]){
Scanner in = new Scanner(System.in);
int digita=Menu();
double valor = valorPulseira(digita);
int tamanhopulseira = tamanhoPulseira(digita);
double tamanhototal = 0;
int digita2;
do {
        digita2=menuAcessorio();
        switch(digita2){
        case 1:
        valor += 225;
        tamanhototal += 1.3;
        break;
        case 2:
        valor += 185;
        tamanhototal += 1.5;
        break;
        case 3:
        valor += 200;
        tamanhototal += 0.5;
        break;
        case 4:
        valor += 190;
        tamanhototal += 1;
        break;
        case 5:
        tamanhototal += 2;
        System.out.println("Escolha o material:\n1.Prata - R$150,00\n2.Pedras - R$220,00\n3.Esmaltados - R$198,00");
        int rolinho = in.nextInt();
        switch(rolinho){
            case 1:
            valor += 150;
            break;
            case 2:
            valor += 220;
            break;
            case 3:
            valor += 198;
            break;
        }
        }
        if(tamanhototal > tamanhopulseira){
            System.out.println("\nTamanho máximo da pulseira atingido\n1.Prosseguir para o pagamento.");
            int digita3 = in.nextInt();
        }
        if(digita==6){
            System.out.println("\nDigite 1 para prosseguir para o pagamento.");
            int digita4 = in.nextInt();
        }
    } while (digita2 != 6 && tamanhototal < tamanhopulseira);
valor += suporte(valor);
System.out.println("\nO preço total da compra fica de: R$" +valor);
int digita3 = menuPagamento();
double pagamento = pagamento(valor, digita3);

} }

Can anyone tell me why the system does not respect while in main and simply when the person selects an accessory, does he say that he reached the maximum size?

    
asked by anonymous 22.04.2015 / 23:44

1 answer

2

Let's take a look at this piece:

    int digita2 = menuAcessorio();
    double tamanhototal = 0;
    while (digita2 != 6 && tamanhototal < tamanhopulseira) {
        switch (digita2) {
            case 1:
                valor += 225;
                tamanhototal += 1.3;
                break;
            // Outros cases, que também aumentam o valor de  tamanhototal...
        }
        if (tamanhototal > tamanhopulseira) {
            System.out.println("\nTamanho máximo da pulseira atingido\n1.Prosseguir para o pagamento.");
            int digita3 = in.nextInt();
        }
        // Mais um if...
    }

What happens:

  • Variable digita2 is set before while and does not change value any more .
  • Within while , switch reads the value of digita2 and increases the value of tamanhototal .
  • The condition of if soon after switch will be false initially.
  • Steps 2 and 3 are repeated a lot of times (because of while ) and this will occur almost instantaneously until the tamanhototal value is greater than tamanhopulseira . This is because digita2 is never changed and there is nothing else that can stop this process or request something from the user before it is too late.
  • The System.out.println is executed.
  • It exits from while .
  • That is, I think you should read digita2 somewhere within while .

    Oh, and by the way, please give better names for your variables. Using digita , digita2 , and digita3 is not a good programming practice. At a minimum it would be nice if you describe in the name of the variable what the typed value means.

        
    23.04.2015 / 00:25