Estrutura condicional não executando corretamente - IF ELSE

12 respostas
R

Quando executo o seguinte código, ele aceita apenas a opção 1(sacar). As outras não. Por quê?

import java.util.*;

public class Principal {

public static void main(String[] args) {

ContaCorr ClienteA = new ContaCorr();

ContaCorr ClienteB = new ContaCorr();

ClienteA.agencia = 222;

ClienteA.senha = abc;

ClienteB.nome = Adriana;
Scanner sc = new Scanner(System.in);
    System.out.println("O que vc deseja fazer? \n1 - Sacar; \n2 - Despositar; \n3 - Mudar senha");
    if (sc.nextInt() == 1) {
        System.out.println("Informe a quantia a sacar: ");
        float saque = sc.nextFloat();
        ClienteA.saque(saque);
    } 
    else
        if (sc.nextInt() == 2) {
            System.out.println("Informe a quantia a depositar: ");
            float deposito = sc.nextFloat();
            ClienteA.deposito(deposito);
        }
  else {
        if (sc.nextInt() == 3) {
            System.out.println("Informe a nova senha: ");
            ClienteB.agencia = 123;
        }
   else {
            System.out.println("Opção incorreta: ");
   }
    


}

}
}

12 Respostas

ajfilho

Teste assim:

import java.util.*;
public class Principal {
	public static void main(String[] args) {
		ContaCorr ClienteA = new ContaCorr();
		ContaCorr ClienteB = new ContaCorr();
		ClienteA.agencia = 222;
		ClienteA.senha = "abc";
		ClienteB.nome = "Adriana";

		Scanner sc = new Scanner(System.in);
		System.out.println("O que vc deseja fazer? \n1 - Sacar; \n2 - Despositar; \n3 - Mudar senha");
		if (sc.nextInt() == 1) {
			System.out.println("Informe a quantia a sacar: ");
			float saque = sc.nextFloat();
			ClienteA.saque(saque);
		} else if (sc.nextInt() == 2) {
			System.out.println("Informe a quantia a depositar: ");
			float deposito = sc.nextFloat();
			ClienteA.deposito(deposito);
		} else if (sc.nextInt() == 3) {
			System.out.println("Informe a nova senha: ");
			ClienteB.agencia = 123;
		} else {
		System.out.println("Opção incorreta: ");
		}

	}
}
R
ajfilho:
Teste assim:
import java.util.*;
public class Principal {
	public static void main(String[] args) {
		ContaCorr ClienteA = new ContaCorr();
		ContaCorr ClienteB = new ContaCorr();
		ClienteA.agencia = 222;
		ClienteA.senha = "abc";
		ClienteB.nome = "Adriana";

		Scanner sc = new Scanner(System.in);
		System.out.println("O que vc deseja fazer? \n1 - Sacar; \n2 - Despositar; \n3 - Mudar senha");
		if (sc.nextInt() == 1) {
			System.out.println("Informe a quantia a sacar: ");
			float saque = sc.nextFloat();
			ClienteA.saque(saque);
		} else if (sc.nextInt() == 2) {
			System.out.println("Informe a quantia a depositar: ");
			float deposito = sc.nextFloat();
			ClienteA.deposito(deposito);
		} else if (sc.nextInt() == 3) {
			System.out.println("Informe a nova senha: ");
			ClienteB.agencia = 123;
		} else {
		System.out.println("Opção incorreta: ");
		}

	}
}

Tirei. Mesmo assim não aceita as outras opções. Abrçs....

R

Agora já está executando, mas percebi que tenho que digitar a opção 2 e 3 duas vezes e dá enter para que a alternativa apareca.
Grato!

Jedi

Tente trocar == por equal(). Pois, trata-se de um objeto. :idea:

philipe

Cara, tem que ser necessariamente usando IF ELSE??

Você pode usar também o CASE né:

import java.util.Scanner;
public class Principal{

    public static void main(String[] args) {
		ContaCorr ClienteA = new ContaCorr();
		ContaCorr ClienteB = new ContaCorr();
		ClienteA.agencia = 222;
		ClienteA.senha = "abc";
		ClienteB.nome = "Adriana";

		Scanner sc = new Scanner(System.in);
		System.out.println("O que vc deseja fazer? \n1 - Sacar; \n2 - Despositar; \n3 - Mudar senha");
        switch(sc.nextInt()){
            case 1:{
                System.out.println("Informe a quantia a sacar: ");
                float saque = sc.nextFloat();
                ClienteA.saque(saque);                
            }

            case 2: {
                System.out.println("Informe a quantia a depositar: ");
                float deposito = sc.nextFloat();
                ClienteA.deposito(deposito);                
            }

            case 3: {
                System.out.println("Informe a nova senha: ");
                ClienteB.agencia = 123;
            }

            default: {
                System.out.println("Opção incorreta: ");
                break;
            }
        }
    }
}

Uma outra alternativa :D

O

r063rio:
Agora já está executando, mas percebi que tenho que digitar a opção 2 e 3 duas vezes e dá enter para que a alternativa apareca.
Grato!

O que acontece é que você chama o nextInt() de novo, aí ele procura o próximo na String que você digitou na linha de comando. Para o seu código funcionar você tem que dar um jeito de chamar o nextInt() apenas uma vez. Você pode, por exemplo atribuir a uma variável antes de testar no bloco de if’s. Mas acho melhor usar case mesmo como disse o philipe, ou aderir à campanha anti if.

Não é um objeto, é primitivo mesmo.

R
philipe:
Cara, tem que ser necessariamente usando IF ELSE??

Você pode usar também o CASE né:

import java.util.Scanner;
public class Principal{

    public static void main(String[] args) {
		ContaCorr ClienteA = new ContaCorr();
		ContaCorr ClienteB = new ContaCorr();
		ClienteA.agencia = 222;
		ClienteA.senha = "abc";
		ClienteB.nome = "Adriana";

		Scanner sc = new Scanner(System.in);
		System.out.println("O que vc deseja fazer? \n1 - Sacar; \n2 - Despositar; \n3 - Mudar senha");
        switch(sc.nextInt()){
            case 1:{
                System.out.println("Informe a quantia a sacar: ");
                float saque = sc.nextFloat();
                ClienteA.saque(saque);                
            }

            case 2: {
                System.out.println("Informe a quantia a depositar: ");
                float deposito = sc.nextFloat();
                ClienteA.deposito(deposito);                
            }

            case 3: {
                System.out.println("Informe a nova senha: ");
                ClienteB.agencia = 123;
            }

            default: {
                System.out.println("Opção incorreta: ");
                break;
            }
        }
    }
}

Uma outra alternativa :D


Eu havai pensado no case, mas como se trata de uma condicional com apenas 3 alternativas, fiz com if. Por curiosidade, estou tentando com o case. Ele executou, porém, quando seleciono a opção 1, ele executa 1 e 2. E as opções 3 e 4 estão fazendo a mesma coisa(uma deveria mudar a senha e a outra, exibir o extrato). Segue o código modificado.

import java.util.*;
public class Principal {
public static void main(String[] args) {
ContaCorr ClienteA = new ContaCorr();
ContaCorr ClienteB = new ContaCorr();
ClienteA.agencia = 222;
ClienteA.senha = "abc";
ClienteB.nome = "Adriana";

Scanner sc = new Scanner(System.in);
System.out.println("O que vc deseja fazer? \n1 - Sacar; \n2 - Despositar; \n3 - Mudar senha"
+ "\n4 - Exibir extrato");
switch(sc.nextInt()) {
case 1: {
System.out.println("Informe a quantia a sacar: ");
float saque = sc.nextFloat();
ClienteA.saque(saque);
}
case 2: {
System.out.println("Informe a quantia a depositar: ");
float deposito = sc.nextFloat();
ClienteA.deposito(deposito);
}
case 3: {
System.out.println("Informe a nova senha: ");
ClienteB.senha = "123";
System.out.println("Senha modificada com sucesso");
}
case 4: {
System.out.println(ClienteA.extrato() + "\nAgencia " + ClienteA.agencia);
System.out.println(ClienteB.extrato() + "\nAgencia " + ClienteB.agencia);

}

// System.out.println("Opção incorreta: ");
}

}

}

O

pisa no freio.

Veronicaaa
r063rio:
Eu havai pensado no case, mas como se trata de uma condicional com apenas 3 alternativas, fiz com if. Por curiosidade, estou tentando com o case. Ele executou, porém, quando seleciono a opção 1, ele executa 1 e 2. E as opções 3 e 4 estão fazendo a mesma coisa(uma deveria mudar a senha e a outra, exibir o extrato). Segue o código modificado.
import java.util.*;
public class Principal {
    public static void main(String[] args) {
        ContaCorr ClienteA = new ContaCorr();
        ContaCorr ClienteB = new ContaCorr();
        ClienteA.agencia = 222;
        ClienteA.senha = "abc";
        ClienteB.nome = "Adriana";
        
        Scanner sc = new Scanner(System.in);
        System.out.println("O que vc deseja fazer? \n1 - Sacar; \n2 - Despositar; \n3 - Mudar senha"
                + "\n4 - Exibir extrato");
        switch(sc.nextInt()) {
            case 1: {
               System.out.println("Informe a quantia a sacar: ");
               float saque = sc.nextFloat();
               ClienteA.saque(saque);
            }
            case 2: {
                System.out.println("Informe a quantia a depositar: ");
                float deposito = sc.nextFloat();
                ClienteA.deposito(deposito);
            }
            case 3: {
                System.out.println("Informe a nova senha: ");
                ClienteB.senha = "123";
                System.out.println("Senha modificada com sucesso");
            }
            case 4: {
                System.out.println(ClienteA.extrato() + "\nAgencia " + ClienteA.agencia);
                System.out.println(ClienteB.extrato() + "\nAgencia " + ClienteB.agencia);

            }
       
       //         System.out.println("Opção incorreta: ");
       }
        

        
    }


}
Tem que colocar um break; no final de cada case.
R

???

R

Foi uma bela pisada na bola que dei. É claro que tava faltando o ‘break’.
Agora tá executando normalmente.
Valeu, galera…

philipe

Descobriu o por que do

pisa no freio
???
hahaha

Mas eh isso cara, precisando… :slight_smile:

Criado 26 de junho de 2009
Ultima resposta 26 de jun. de 2009
Respostas 12
Participantes 6