Estrutura condicional não executando corretamente - IF ELSE

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: ");
   }
    


}

}
}

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: ");
		}

	}
}

[quote=ajfilho]Teste assim:

[code]
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: ");
	}

}

}
[/code][/quote]

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

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!

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

Cara, tem que ser necessariamente usando IF ELSE??

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

[code]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;
        }
    }
}

}[/code]

Uma outra alternativa :smiley:

[quote=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![/quote]
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.

[quote=philipe]Cara, tem que ser necessariamente usando IF ELSE??

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

[code]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;
        }
    }
}

}[/code]

Uma outra alternativa :smiley: [/quote]
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: ");
   }
    

    
}

}

pisa no freio.

[quote=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.

[code]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: ");
   }
    

    
}

}[/code][/quote]
Tem que colocar um break; no final de cada case.

???

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

Descobriu o por que do [quote]pisa no freio[/quote] ???
hahaha

Mas eh isso cara, precisando… :slight_smile: