Ir ao conteúdo
  • Cadastre-se
XxCableXX

Java Não consigo solucionar uma Questão do The Huxley

Recommended Posts

Tô em dúvida em uma questão no the huxley.

Ainda sou iniciante, Tô aprendendo sobre java.

Tentei Solucionar de duas maneiras, mas não consigo.

Sempre dá dois erro, mas não consigo identificar.

 

 

The Huxley.png

 

 

 

1º Código

import java.io.*;
import java.util.*;
import java.util.Scanner;

public class HuxleyCode {
  public static void main(String args[]) {
        Scanner teclado = new Scanner(System.in);
        int dias, km; 
        double diaria, kmRodado, diariaSoma, diariaKm, diariaTotal = 0;
        
        dias = teclado.nexInt();
        km = teclado.nextInt();
        
        if((dias >=1 && dias <= 30) && (km >= 1 && km <= 1000)){
            diaria = dias * 30;
            kmRodado = km * 0.01;
            diariaSoma = (diaria+kmRodado);
            diariaKm = diariaSoma * 0.10;
            diariaTotal = diariaSoma-diariaKm;
            
            System.out.format("%.2f \n",diariaTotal);
            
        }
        else{
            System.out.format("%.2f \n",diariaTotal);
        }

import java.io.*;
import java.util.*;
import java.text.DecimalFormat;
import java.util.Scanner;

public class HuxleyCode {
  public static void main(String args[]) {
       Scanner teclado = new Scanner(System.in);
        int dias, km; 
        double diaria, kmRodado, diariaSoma, diariaKm, diariaTotal = 0;
        String dx = null;
        
        dias = teclado.nextInt();
        km = teclado.nextInt();
        
        if((dias >=1 && dias <= 30) && (km >= 1 && km <= 1000)){
            diaria = dias * 30;
            kmRodado = km * 0.01;
            diariaSoma = (diaria+kmRodado);
            diariaKm = diariaSoma * 0.10;
            diariaTotal = diariaSoma-diariaKm;
            
            DecimalFormat df = new DecimalFormat("0.##");
            dx = df.format(diariaTotal);
            System.out.println(dx);  
            
        }
        else{
            System.out.println(dx); 
        }
        
    }    
}

 

 

 

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, vamos lá....

O segundo código está arredondando certo.

Porém, quando a saída CERTA é, por exemplo 515.50, ele imprime 515.5

Tente resolver esse problema que está ignorando o 0 decimal.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@XxCableXX Olá. Qual é o erro que está dando aí?

No primeiro código apenas tem um erro nessa parte:

dias = teclado.nexInt();
// Seria 
dias = teclado.nextInt();

Outro ponto: Não precisa desses imports:

import java.io.*;
import java.util.*;

Também se acostume a solicitar para o usuário o que você precisa:

System.out.print("Quantidade de dias: ");
dias = teclado.nextInt();
        
System.out.print("Quilômetros rodados: ");
km = teclado.nextInt();

E esse bloco else seu não faz nada

 

No enunciado do exercício, a quantidade de dias deve estar entre 1 e 30. Não é falado nada, no enunciado, de como proceder caso a quantidade de dias não esteja nesse intervalo, logo, você deve obrigar o usuário a informar a quantidade de dias corretamente. Recomendo um do/while para isso 

Para a quantidade de quilômetros rodados a mesma coisa

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@XxCableXX Seria forçar o usuário a fornecer a quantidade de dias correta:

do {
    System.out.print("Quantidade de dias: ");
    dias = teclado.nextInt();
} while (dias < 1 || dias > 30);

De acordo com o enunciado, a quantidade de dias deve estar entre 1 e 30 dias (incluindo)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, r_Tray disse:

@XxCableXX Seria forçar o usuário a fornecer a quantidade de dias correta:


do {
    System.out.print("Quantidade de dias: ");
    dias = teclado.nextInt();
} while (dias < 1 || dias > 30);

De acordo com o enunciado, a quantidade de dias deve estar entre 1 e 30 dias (incluindo)

Ainda continua o mesmo erro :(

@r_Tray

Compartilhar este post


Link para o post
Compartilhar em outros sites

@r_Tray Não é que dá erro, é que ele passa por 30 verificações e na 23 e 30 dá erro, mas não dá um dica.

 

 

 

652911533_Cdigo1.png.b61d2647f85a1350b425a5dada605aa9.png

 

 

 

 

 

 

 

 

 

 

Esse é o código que estou utilizando.

	   
       Scanner teclado = new Scanner(System.in);
       DecimalFormat df = new DecimalFormat("0.##");
       
        int dias, km; 
        double diaria, kmRodado, diariaSoma, diariaKm, diariaTotal = 0;
        String dx = null;
        
            do{
                dias = teclado.nextInt();
                km = teclado.nextInt();
        
            } while ((dias < 1 || dias > 30) && (km < 1 || km >1000));
        
      
            diaria = dias * 30;
            kmRodado = km * 0.01;
            diariaSoma = (diaria+kmRodado);
            diariaKm = diariaSoma * 0.10;
            diariaTotal = diariaSoma-diariaKm;
            dx = df.format(diariaTotal);
            
			System.out.println(dx); 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@XxCableXX A ideia que quis passar seria essa:

do {
    System.out.print("Quantidade de dias: ");
    dias = teclado.nextInt();
} while (dias < 1 || dias > 30);

do {
    System.out.print("Quilômetros rodados: ");
    km = teclado.nextInt();
} while (km < 1 || km > 1000);

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 minutos atrás, r_Tray disse:

@XxCableXX A ideia que quis passar seria essa:


do {
    System.out.print("Quantidade de dias: ");
    dias = teclado.nextInt();
} while (dias < 1 || dias > 30);

do {
    System.out.print("Quilômetros rodados: ");
    km = teclado.nextInt();
} while (km < 1 || km > 1000);

 

@r_Tray Entendi beleza, mas é que parte do colocar uma mensagem para usuário a plataforma não aceita.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, voltei aqui kkk

Como eu disse o problema é o 0...

Não sei como resolver em Java, porque ainda to aprendendo a programar em Java, só sei em C++ kkkkkk

Mas acho q uma pesquisada e você acha como resolver!

image.thumb.png.26122d6d39b0984c28f5c087e22e2d1a.png

  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mateus Fernando Isso dá para resolver dessa forma que estou fazendo aqui:

System.out.printf("Valor a pagar: %.02f", diariaTotal); 

Só que no caso de ser um corretor automático só é possível passar a formatação: "%.2f"

adicionado 4 minutos depois

Pode ser assim:

System.out.println(String.format("%.2f", diariaTotal)); 

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
30 minutos atrás, Mateus Fernando disse:

Oi, voltei aqui kkk

Como eu disse o problema é o 0...

Não sei como resolver em Java, porque ainda to aprendendo a programar em Java, só sei em C++ kkkkkk

Mas acho q uma pesquisada e você acha como resolver!

image.thumb.png.26122d6d39b0984c28f5c087e22e2d1a.png

É vdd, valeu. No meu não tá mostrando a dica kk

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou mesmo assim:

String formato = "#,##0.00";
DecimalFormat d = new DecimalFormat(formato);

System.out.println(d.format(diariaTotal));

 

adicionado 3 minutos depois

@Mateus Fernando Ao que parece você resolveu a questão 😀

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
33 minutos atrás, r_Tray disse:

@Mateus Fernando Isso dá para resolver dessa forma que estou fazendo aqui:


System.out.printf("Valor a pagar: %.02f", diariaTotal); 

 Só que no caso de ser um corretor automático só é possível passar a formatação: "%.2f"

adicionado 4 minutos depois

Pode ser assim:


System.out.println(String.format("%.2f", diariaTotal)); 

 

Fiz outro código utilizando esse forma.

 Scanner teclado = new Scanner(System.in);
       
       
        int dias = 0, km = 0; 
        double diaria = 0, kmRodado = 0, diariaSoma = 0, diariaKm = 0, diariaTotal = 0;
        
            do{
                dias = teclado.nextInt();
            
            } while (dias < 1 || dias > 31);
        
            do{
            
                km = teclado.nextInt();
            
            } while (km < 1 || km > 1000);

        
            diaria = dias * 30;
            kmRodado = km * 0.01;
            diariaSoma = (diaria+kmRodado);
            diariaKm = diariaSoma * 0.10;
            diariaTotal = diariaSoma-diariaKm;
            
            System.out.println(String.format("%.2f", diariaTotal)); 
        
        }

Dá erro

1322181867_Cdigo1.png.0f171a761f585249474627d47c31c5ef.png

adicionado 0 minutos depois

 

adicionado 1 minuto depois
adicionado 2 minutos depois
16 minutos atrás, r_Tray disse:

Ou mesmo assim:


String formato = "#,##0.00";
DecimalFormat d = new DecimalFormat(formato);

System.out.println(d.format(diariaTotal));

 

adicionado 3 minutos depois

@Mateus Fernando Ao que parece você resolveu a questão 😀

@r_Tray Vou tentar aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

@r_Tray Oi, eu já tinha feito em C kkk Só estava tentando ajudar o @XxCableXX  kkkkkkk

Com essa formatação foi em Java aq

String formato = "###0.00";
DecimalFormat d = new DecimalFormat(formato);

System.out.println(d.format(diariaTotal));

Dei uma modificada no que o @r_Tray enviou e funcionou kkkk
Tenta ai @XxCableXX o/

adicionado 4 minutos depois

Ta ai meu código, no caso fiz uma lógica que não precisa de Decisão ou While. Vê se consegue entender o/

import java.io.*;
import java.util.*;
import java.text.DecimalFormat;
import java.util.Scanner;

public class HuxleyCode {
  public static void main(String args[]) {
       Scanner teclado = new Scanner(System.in);
        int dias, km; 
        double diaria, kmRodado, diariaSoma, diariaKm, diariaTotal = 0;
        
        dias = teclado.nextInt();
        km = teclado.nextInt();
    
            diaria = dias * 30;
            kmRodado = km * 0.01;
            diariaSoma = (diaria+kmRodado);
            diariaTotal = diariaSoma * 0.9;
            String formato = "###0.00";
            DecimalFormat d = new DecimalFormat(formato);
            System.out.println(d.format(diariaTotal));
         
    }    
}

 

  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@r_Tray @Mateus Fernando Mano kkkkk

Funcionou Uhuuu

Scanner teclado = new Scanner(System.in);
       
       
        int dias = 0, km = 0; 
        double diaria = 0, kmRodado = 0, diariaSoma = 0, diariaKm = 0, diariaTotal = 0;
        
        String formato = "###0.00" ;
        DecimalFormat d = new DecimalFormat(formato);
            
        do{
                dias = teclado.nextInt();
            
            } while (dias < 1 || dias > 31);
        
            do{
            
                km = teclado.nextInt();
            
            } while (km < 1 || km > 1000);
      
            diaria = dias * 30;
            kmRodado = km * 0.01;
            diariaSoma = (diaria+kmRodado);
            diariaKm = diariaSoma * 0.10;
            diariaTotal = diariaSoma-diariaKm;
            
            System.out.println(d.format(diariaTotal));

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, r_Tray disse:

@Mateus Fernando Que curso é esse? Já vem a nota ao enviar o exercício? 

Eu faço Engenharia de Computação na UF do meu estado kkkkk

Tô no 2º período kkkkk

adicionado 0 minutos depois
agora, XxCableXX disse:

@r_Tray @Mateus Fernando Mano kkkkk

Funcionou Uhuuu


Scanner teclado = new Scanner(System.in);
       
       
        int dias = 0, km = 0; 
        double diaria = 0, kmRodado = 0, diariaSoma = 0, diariaKm = 0, diariaTotal = 0;
        
        String formato = "###0.00" ;
        DecimalFormat d = new DecimalFormat(formato);
            
        do{
                dias = teclado.nextInt();
            
            } while (dias < 1 || dias > 31);
        
            do{
            
                km = teclado.nextInt();
            
            } while (km < 1 || km > 1000);
      
            diaria = dias * 30;
            kmRodado = km * 0.01;
            diariaSoma = (diaria+kmRodado);
            diariaKm = diariaSoma * 0.10;
            diariaTotal = diariaSoma-diariaKm;
            
            System.out.println(d.format(diariaTotal));

 

Boa!!! hashusahusa o/

  • Amei 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@r_Tray É uma plataforma que tem vários exercícios de programação.

Nesse caso eu mandei meu código, esses números são os testes que seu código vai passar, para ser aprovado ele tem que está verde todos os testes.

Código 1.png

adicionado 2 minutos depois

@Mateus Fernando @r_Tray

Manos valeu pela ajuda, Estou grato.

Faço Sistema da Informação 

Tô no 1º periodo kkk

Ainda tô tentando aprender programar kk

Obrigado por vcs ter ajudado.

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×