Série da semana: Primeiros passos no Angular

Veja mais

Correção/Alteração no programa

24/09/2018

1

E aí, pessoal! Sou novo tanto no mundo da programação quanto no fórum e estou precisando da ajuda de vocês. Estou aprendendo java e preciso fazer um programa que pegue o valor digitado(quebrado, como, por exemplo 2.52), some com ele mesmo diversas vezes até encontrar um número redondo e que seja <= 250. Em seguida, divida esse número encontrado pelo número digitado pelo usuário. A saída será a soma que foi dividida e o resultado da divisão.
Tentei fazer esse programinha básico mas quando digito qualquer valor e dou "enter" o programa não responde. Não dá erro algum, apenas não acontece nada. Segue o programa que fiz:
import java.util.Scanner;
import java.util.Locale;

public class Calculator{

	public static void main(String[] args){
		
		float numero, soma=0, valor=0;
		int fazer=0;
		Scanner input = new Scanner(System.in);
		input.useLocale(Locale.US);
		
		System.out.println("Digite o valor desejado: ");
		numero = input.nextFloat();
		input.close();
				
		while(fazer != 1){
			soma = soma + numero;
			if((soma % 1 == 0) && (soma <= 250)){
				valor = (soma / numero);
				fazer = 1;
			}else;
		}
		
		System.out.println("Soma: "+soma+"/n Valor: "+valor);
	}
}

Agradeço quem puder ajudar! =)
Responder

Posts

24/09/2018

Marcio Souza

Uma maneira simples de fazer isso é pegar a soma e converte-las para um inteiro, ao fazer isso compare para ver se o resultado da conversão é igual ao valor armazenado em soma. Por exemplo soma vale 5.04, ao converter para inteiro o valor será 5, então, 5.04 é diferente 5. Quando esses valores forem iguais é porque chegou no resultado desejado.

if ( (soma == (int) soma) ) {
      valor = (soma / numero);
       fazer = 1;
} 
Responder

24/09/2018

Hugo Silva

Olá, Clayton, boa tarde!

Então, acontece que no seu código, o valor deve ser menor ou igual a 250 (<= 250) e toda vez que esse valor é maior ele acaba entrando em um looping.
Acho que você deve acrescentar ao código uma verificação para quando o número for maior que 250 , fazer com que o código pare.

Exemplo:
public class Calculator {
	
	 public static void main(String[] args){
         
	        float numero, soma=0, valor=0;
	        int fazer=0;
	        Scanner input = new Scanner(System.in);
	        input.useLocale(Locale.US);
	         
	        System.out.println("Digite o valor desejado: ");
	        numero = input.nextFloat();
	        input.close();
	                 
	        while(fazer != 1){
	            soma += numero;
	            if((soma % 1 == 0) && (soma <= 250)){
	                valor = (soma / numero);
	                fazer = 1;
	            }else 
	            	if(soma > 250) {
	            		System.out.println("A soma é maior : " + soma + "valor : " + valor);
	            		return;
	            	}
	        }
	         
	        System.out.println("Soma: "+soma+"/n Valor: "+valor);
	    }

}

Responder

24/09/2018

Clayton Castro

Boa noite.

Obrigado pelas respostas, porém, ainda não consegui resolver o problema.

Fiz as duas alterações sugeridas mas o programa continua com erro, porém, o programa agora funciona, mas calcula errado.

Estou testando com o número 2.48. O que deveria acontecer é: (2,48 + 2,48 + 2,48 + ... até atingir o primeiro número inteiro, que no caso é 62 e então dividir 62/2.48). O programa está retornando que a soma é maior que 250. Quando testo com o valor 2.1, o programa funciona corretamente.

Segue o programa atualizado:
import java.util.Scanner;
import java.util.Locale;
 
public class Calculator{
 
    public static void main(String[] args){
         
        float numero, soma=0, valor=0;
        int fazer=0;
        Scanner input = new Scanner(System.in);
        input.useLocale(Locale.US);
         
        System.out.print("Digite o valor desejado: ");
        numero = input.nextFloat();
        input.close();
                 
        while(fazer != 1){
            soma = soma + numero;
            if((soma == (int) soma) && (soma <= 250)){
            	valor = (soma/numero);
            	fazer = 1;
            }else if(soma > 250){
            	System.out.println("A soma é maior: "+soma+"\\nValor: " +valor);
                return;
            }
        }
         
        System.out.println("Soma: "+soma+"\\nValor: "+valor);
    }
}
Responder