Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

TGmarks

Programa converter polegadas em cm e vice-versa

Mensagens Recomendadas

TGmarks

Viva pessoal, venho mais uma vez pedir a ajuda de um entendido na matéria para continuar/acabar um exercício em Java.

O exercício é o seguinte: criar uma aplicação que converta cm em polegadas e vice-versa. Ora até aí tudo bem, o problema é o seguinte: é pedido no exercício que o programa faça as duas operações de acordo com o pedido do utilizador, passo a exemplificar:

Exemplos de execução do programa:

Execução do programa: -------Resultado produzido:

java Converte 500 cm --------196,8504 polegadas

java Converte 500 polegadas -1270 cm

Eu utilizo o netbeans, e a ideia será colocar no output os comandos para efectuar a conversão de acordo com o que escrevi em cima.

De seguida apresento o meu código:

package exercicio5;
import java.util.*;
/**
*Escrever um programa que converta valores expressos em polegadas para valores expressos
em centímetros e vice-versa. Assuma que esse programa tem uma única classe chamada
Converte.
Considere que uma polegada corresponde a 2,54 centímetros.
Exemplos de execução do programa:
Execução do programa: -------Resultado produzido:
java Converte 500 cm --------196,8504 polegadas
java Converte 500 polegadas -1270 cm
* @author Tiago
*/
public class Exercicio5 {
   public static void main(String[] args) {



   }
   public static double polegadas(){
    double polegadas;
    Scanner input = new Scanner (System.in);
    polegadas = input.nextDouble();
    polegadas = polegadas*2.54;
    System.out.println(polegadas);
    return polegadas;

   }

   public static double centimetros(){
    double centimetros;
    Scanner input = new Scanner (System.in);
    centimetros=input.nextDouble();
    centimetros = centimetros/2.54;
    System.out.println(centimetros);
    return centimetros;
   }
}

A minha dúvida seria o que é que coloco no método main para esperar que o utilizador chame os métodos desejados.

Desde já agradeço a paciência que tiverem para ler a minha dúvida.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

as funções não serão chamadas só por si, tens de as chamar na função main.

e não precisas de esperar por nada, chamas as funções e mais nada


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Sim, e tu é que tens que definir esse comportamento.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

mas tem que haver uma maneira do utilizador escolher se quer de cm para polegadas ou o contrário...

pois existe

olha bem para a linha de comandos de execução da aplicação, e verás até que o que tens está errado


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

pois existe

olha bem para a linha de comandos de execução da aplicação, e verás até que o que tens está errado

mas o que eu tenho está incompleto, se colocar no método main: polegadas() ou centimetros() ele faz a conversão correctamente, o problema é que eu não faço ideia de como hei-de fazer para que o programa possa ler e executar um comando que seja introduzido na consola, por ex. "java Converte 20 cm"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

compila o seguinte código :

public class Main
{
 public static void main(String args[])
 {
   for (int i = 0; i < args.length; i++)
   {
     System.out.println(args[i]);
   }
 }
}

de seguida executa a seguite linha de comando:

java Main asd fgh jkl

Editado por HappyHippyHippo
  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

compila o seguinte código :

public class Main
{
 public static void main(String args[])
 {
for (int i = 0; i < args.length; i++)
{
  System.out.println(args[i]);
}
 }
}

de seguida executa a seguite linha de comando:

java Main asd fgh jkl

devolve-me os argumentos em linhas separadas...

Editado por TGmarks

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

Ok, acho que já percebi o que querias dizer alterei para o seguinte:

public class Exercicio5 {
   public static void main(String[] args) {



   }
   public static double polegadasParaCentimetros(double polegadas, double centimetros){
    Scanner input = new Scanner (System.in);
    polegadas = input.nextDouble();
    centimetros = polegadas*2.54;
    System.out.println(centimetros);
    return centimetros;

   }

   public static double centimetrosParaPolegadas(double polegadas, double centimetros){
    Scanner input = new Scanner (System.in);
    centimetros = input.nextDouble();
    polegadas = centimetros/2.54;
    System.out.println(polegadas);
    return polegadas;
   }
}

embora continue com a dúvida na classe main

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

Pessoal, peço que esqueçam as dúvidas que tive até agora, porque já estão +/- ultrapassadas, muito à custa do HappyHippyHipo!!!

Acho que tenho um código bastante mais perto do resultado final que pretendo:

package exercicio5;
import java.util.*;
/**
*Escrever um programa que converta valores expressos em polegadas para valores expressos
em centímetros e vice-versa. Assuma que esse programa tem uma única classe chamada
Converte.
Considere que uma polegada corresponde a 2,54 centímetros.
Exemplos de execução do programa:
Execução do programa: -------Resultado produzido:
java Converte 500 cm --------196,8504 polegadas
java Converte 500 polegadas -1270 cm
* @author Tiago
*/
public class Exercicio5 {
   public static void main(String[] args) {
   Scanner input = new Scanner (System.in);
   double valor;
   String conversao;
   valor = input.nextDouble();
   conversao = input.toString();
    if (conversao.equals("cm")){
	    centimetrosParaPolegadas(valor);
	    }
    if (conversao.equals("polegadas")){
	    polegadasParaCentimetros(valor);
    }

   }
   public static double polegadasParaCentimetros(double valor){
    valor = valor*2.54;
    System.out.println(valor);
    return valor;
   }

   public static double centimetrosParaPolegadas(double valor){
    valor = valor/2.54;
    System.out.println(valor);
    return valor;
   }
}

só tem um problema: não funciona! :)

ou seja não me dá resultado nenhum, por isso mais uma vez venho pedir a V/ preciosa ajuda...

desde já obrigado...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

olha bem para o enunciado, ele pretende que os dados sejam inseridos pela linha de comandos no momento da chamada da aplicação

tem isso em conta, não existe a necessidade de ter instanciado uma instância da classe Scanner, sequer.

o que necessitas é verificar os dados que tens na variável args (foi por isso que coloquei o código no post anterior) de onde tirar os valores a serem passados para as funções que tens.

outra coisa, deverias alterar as funções para fazer unicamente a conversão. tudo que seja output deverá ser feito na função main. isto é uma prática corrente para se poder reaproveitar o código. neste caso, para reaproveitar a função de conversão dos valores.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

Ok, já sei o que tenho de fazer, mas como é que se faz para ir buscar os argumentos, é com um ciclo for? E depois, como faço para comparar as strings de texto para o programa saber qual das operações terá que fazer? É que eu deparo-me logo com o problema de existirem dois tipos de dados no vector args[], String para "cm" ou "polegadas" e double para o valor...

Obrigado pela paciência

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Ok, já sei o que tenho de fazer, mas como é que se faz para ir buscar os argumentos, é com um ciclo for?

compila o seguinte código :

public class Main
{
 public static void main(String args[])
 {
   for (int i = 0; i < args.length; i++)
   {
     System.out.println(args[i]);
   }
 }
}

de seguida executa a seguite linha de comando:

java Main asd fgh jkl

como vês, o post que tinha colocado anteriormente servia para algo ...

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

lol, tens razão só percebi agora, mas não sei como implementar na minha situação, estava a tentar colocar args[0] para comparar a string de texto, mas como tenho outros erros ainda não consegui testar...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

Será que este código era suposto funcionar?

public class Exercicio5 {
   public static void main(String[] args) {
    if (args[1].equals("cm")){
	    System.out.println(args[0]/2.54);
	    }
    if (args[1].equals("polegadas")){
	   System.out.println(args[0]*2.54);
    }

   }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

isso já é um passo no caminho certo. pontos a ter em conta:

- args é um a lista de strings, logo não podes aplicar a operação directamente na String

- imagina que quem chama a aplicação se esquece de colocar os argumentos correctos ? isso vais estoirar ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

Já funciona! cá está o código que utilizei:

public class Exercicio5 {
   public static void main(String[] args) {
    if (args[1].equals("cm")){
	    System.out.println(Double.parseDouble(args[0])/2.54 + (" polegadas"));
	    }
    if (args[1].equals("polegadas")){
	   System.out.println(Double.parseDouble(args[0])*2.54 + (" centimetros"));
    }

   }
}

HappyHippyHippo: de facto se os argumentos estiverem incorrectos irá dar erro, mas o prof não exige que eu faça programação defensiva...

Só mais uma dúvida, para ver se acabo de uma vez por todas este exercício: como é que arredondo o resultado para 4 casas decimais? acho que tenho de usar o DecimalFormat, mas não encontro nenhum exemplo com isso.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

HappyHippyHippo: de facto se os argumentos estiverem incorrectos irá dar erro, mas o prof não exige que eu faça programação defensiva...

Não é essa a mentalidade de um programador ...

Só mais uma dúvida, para ver se acabo de uma vez por todas este exercício: como é que arredondo o resultado para 4 casas decimais? acho que tenho de usar o DecimalFormat, mas não encontro nenhum exemplo com isso.

double d;
DecimalFormat df = new DecimalFormat("#.####");
df.format(d);

ps : não testado


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TGmarks

double d;
DecimalFormat df = new DecimalFormat("#.####");
df.format(d);

ps : não testado

É exactamente isso! Está concluído, muito obrigado, sem a tua ajuda HHH nunca mais lá chegava.

Aproveito para deixar aqui o código, pode ser que ajude alguém:

package exercicio5;
import java.text.DecimalFormat;
/**
*Escrever um programa que converta valores expressos em polegadas para valores expressos
em centímetros e vice-versa. Assuma que esse programa tem uma única classe chamada
Converte.
Considere que uma polegada corresponde a 2,54 centímetros.
Exemplos de execução do programa:
Execução do programa: -------Resultado produzido:
java Converte 500 cm --------196,8504 polegadas
java Converte 500 polegadas -1270 cm
* @author Tiago
*/
public class Exercicio5 {
public static void main(String[] args) {
	DecimalFormat df = new DecimalFormat("#.####");
	if (args[1].equals("cm")){
		System.out.println(df.format(Double.parseDouble(args[0])/2.54) + (" polegadas"));
		}
	if (args[1].equals("polegadas")){
	   System.out.println(df.format(Double.parseDouble(args[0])*2.54) + (" centimetros"));
	}

}
}

Editado por TGmarks

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
LuisMendes330

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

at exercicio5.Exercicio5.main(Exercicio5.java:19)

Java Result: 1

Ta me a dar este erro nesse programa...porquê?

Obgd

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

at exercicio5.Exercicio5.main(Exercicio5.java:19)

Java Result: 1

Ta me a dar este erro nesse programa...porquê?

Obgd

HappyHippyHippo: de facto se os argumentos estiverem incorrectos irá dar erro, mas o prof não exige que eu faça programação defensiva...

é preciso dizer mais ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.