Ajuda com Exercício em Java - Estrutura de Seleção

5 respostas
java
D

Eai pessoal tudo bem?

Estou com um problema com esse exercício de estrutura de seleção, no caso o código fica pulando direto… queria saber aonde estou errando exatamente, obrigado pela ajuda !

Os detalhes do exercício estão aqui caso alguém queira consultar:


import java.util.*;
public class ContribuicaoJava {

public static void main(String[] args) {
Scanner sal = new Scanner(System.in);

float inss = 0,salario;
	
System.out.println("Qual o valor do salario bruto?");
salario = sal.nextFloat();

if(salario <= 1.556){

inss = (float) ((salario*0.8)) ;
}else{
	if(salario >= 1.557 || salario <= 2.594){
		
		inss = (float) ((salario*0.09));
		
	}else{
		if(salario >= 2.595 || salario >= 5.189){
			inss = (float) ((salario*0.11));
		}
	}
	System.out.println("O salario bruto é de :R$"+salario);
	System.out.println("A contribuição para o INSS é de R$:"+(inss));
	System.out.println("O Salario com a contribuição é de R$"+(salario-inss));
	
if (inss <=1.903) {
System.out.println("Isento de contribição");
}else{ 
	if(inss >=2.853 || inss <=3.804){
	System.out.println("A parcela a deduzir do imposto é de R$142 o salario pós a contribuição é de R$"+(inss-142));	
	}else{
		if(inss>=3.805 || inss <=4.753){
			System.out.println("A parcela teste teste");
		}
	}
		
			
			}
}
	
}

}

5 Respostas

L

Em java o . representa o ínicio da parte decimal de um número ou seja 2.855 não é dois mil oitocentos e cinquenta, números com parte decimais podem ser representando assim:

2_000.45 ou 2000.45

E este if dentro do else pode ser subistituido por else if:

if (expressão booleana) {
// codigo que sera executado caso esta condição seja igual a true.

}
else if (expressão booleana) {
// se este teste for igual a true o codigo sera executado e a execução pula para
// a primeira linha abaixo da estrutura condicional
}
else if(expressão booleana) {

}
else {
// caso nenhum dos ifs acima rodem, execute este código
}
edit: este trecho de código está errado:
System.out.println("A parcela a deduzir do imposto é de R$142 o salario pós a contribuição é de R$"+(inss-142));

//subistitua a variável inss pela variável salario.

Ao final do seu código sempre feche recursos de entrada e/ou saída. nesse caso invoque o método close() da classe Scanner.

Faça as alterações no código, rode e teste com diferentes valores. boa sorte ;)

D

Oi leofariasrj25 tudo bem?

Porra obrigado!

Eu só não entendi a parte do close, como funciona?

L

declare sal.close() na última linha do método main(). Desta forma você está fechando o Scanner evitando assim que ele fique consumindo recursos da máquina. Quando você começar a se aprofundar em leitura e escrita de dados você vai entender porque é importante invocar o método close() de classes como Scanner, BufferedReader, BufferedWriter, etc.

V

Complemento a resposta do @leofariasrj25 apenas quanto aos valores da variável “salario” dentro das condições. Da forma que está construída, alguns valores não passarão pelo código necessário. Exemplo: se informarmos o salário de R$ 1556,50 (ou qualquer outro valor decimal), a execução não entrará em nenhuma das condições relacionadas ao INSS. O mesmo acontece para o valor R$ 2594,50 (ou qualquer outro valor decimal).

Para que esse “problema” não aconteça, os valores deverão possuir casas decimais de acordo com o estabelecido pelo exercício. Além disso, para simplificar a codificação, poderá ser usado condições mutuamente exclusivas. Exemplo:

if (salario <= 1556.94) // se o salário for menor ou igual a este valor, o primeiro if será executado.
{executa isso}
else if (salario <= 2594.92) // caso não seja executado o primeiro e o salário atender esta condição, o segundo if é executado
{executa isso}
else if (salario <= 5189,82) // etc.
{executa isso}

Qualquer dúvida, responde ai!

D

Sensacional! Obrigado cara!

Criado 16 de maio de 2016
Ultima resposta 18 de mai. de 2016
Respostas 5
Participantes 3