Estava praticando java, quando me deparo com o seguinte qusetionamento, como eu consigo fazer o usuário escolher dentre alguma opção pré-existente, por exemplo para converter de Quilômetros para metros, como eu faria para o usuário escolher Quilômetros, já que existem mais outras 4 opções (Hectomêtros, Decâmetros, Centímetros e Milímetros) e meu objetivo é fazer um sistema que possibilite a conversão de qualquer um desses?
O jeito mais simples:
System.out.println("escolha uma opção:");
System.out.println(" a - opção que faz uma coisa");
System.out.println(" b - opção que faz outra coisa");
System.out.println(" c - opção que faz uma coisa diferente");
1 curtida
Lucas, também estou estudando Java! Se entendi bem a sua pergunta, acredito (Switch / Case) resolveria o seu problema. O seu código ficaria mais ou menos assim.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int escolha;
System.out.println("escolha uma opção:");
System.out.println(" 1 - Kilometros");
System.out.println(" 2 - Decâmetros");
System.out.println(" 3 - Centimetros");
System.out.println(" 4 - Milímetros");
escolha = input.nextInt();
switch (escolha) {
case 1:
System.out.println("Lógica para kilometros");
break;
case 2:
System.out.println("Lógica para Decâmetros");
break;
case 3:
System.out.println("Lógica para Centimetros");
break;
case 4:
System.out.println("Lógica para Milímetros");
break;
default:
System.out.println("Número inválido. Digite um número de 1 a 4.");
break;
}
}
}
1 curtida
Se quiser fazer uma solução mais genérica com polimorfismo, pode fazer assim:
import java.util.Scanner;
public class Exemplo {
private static final Scanner in = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Bem vindo ao conversor de medidas");
System.out.print("Informe um valor numerico: ");
double valor = Double.parseDouble(in.nextLine());
System.out.println("Unidades disponíveis: ");
System.out.println(" " + Comprimento.KM);
System.out.println(" " + Comprimento.HM);
System.out.println(" " + Comprimento.DAM);
System.out.println(" " + Comprimento.CM);
System.out.println(" " + Comprimento.MM);
System.out.print("Informe a unidade desejada: ");
String abreviatura = in.nextLine();
Comprimento comprimento = Comprimento.porAbreviatura(valor, abreviatura);
System.out.println(comprimento + " = " + comprimento.emQuilometro());
System.out.println(comprimento + " = " + comprimento.emHectometro());
System.out.println(comprimento + " = " + comprimento.emDecametro());
System.out.println(comprimento + " = " + comprimento.emCentimetro());
System.out.println(comprimento + " = " + comprimento.emMilimetro());
}
}
Exemplo de saída do programa:
Bem vindo ao conversor de medidas
Informe um valor numerico: 1000
Unidades disponíveis:
Km
hm
dam
cm
mm
Informe a unidade desejada: cm
1000,00 cm = 0,01 Km
1000,00 cm = 0,10 hm
1000,00 cm = 1,00 dam
1000,00 cm = 1000,00 cm
1000,00 cm = 10000,00 mm
Abaixo está o fonte da classe Comprimento
/**
* Abstração que representa unidades de medidas de comprimento.<BR>
* Disponibiliza métodos para obter instâncias das seguintes unidades:
* {@link Quilometro}, {@link Hectometro}, {@link Decametro}, {@link Centimetro}
* e {@link Milimetro}.<BR>
* - Para obter instâncias de {@link Quilometro}, utilize o método
* {@link #quilometro(double)};<BR>
* - Para obter instâncias de {@link Hectometro}, utilize o método
* {@link #hectometro(double)};<BR>
* - Para obter instâncias de {@link Decametro}, utilize o método
* {@link #decametro(double)};<BR>
* - Para obter instâncias de {@link Centimetro}, utilize o método
* {@link #centimetro(double)};<BR>
* - Para obter instâncias de {@link Milimetro}, utilize o método
* {@link #milimetro(double)}.<BR>
*/
@SuppressWarnings({ "serial", "unchecked" })
public abstract class Comprimento extends Number {
/**
* Unidade de medida centímetro
*/
public static final class Centimetro extends Comprimento {
private Centimetro(double valor) {
super(valor, CM);
}
@Override
public Centimetro emCentimetro() {
return this;
}
@Override
public Decametro emDecametro() {
return new Decametro(valor / 1000.0);
}
@Override
public Hectometro emHectometro() {
return new Hectometro(valor / 10000.0);
}
@Override
public Milimetro emMilimetro() {
return new Milimetro(valor * 10.0);
}
@Override
public Quilometro emQuilometro() {
return new Quilometro(valor / 100000.0);
}
}
/**
* Unidade de medida decâmetro
*/
public static final class Decametro extends Comprimento {
private Decametro(double valor) {
super(valor, DAM);
}
@Override
public Centimetro emCentimetro() {
return new Centimetro(valor * 1000.0);
}
@Override
public Decametro emDecametro() {
return this;
}
@Override
public Hectometro emHectometro() {
return new Hectometro(valor / 10.0);
}
@Override
public Milimetro emMilimetro() {
return new Milimetro(valor * 10000.0);
}
@Override
public Quilometro emQuilometro() {
return new Quilometro(valor / 100.0);
}
}
/**
* Unidade de medida hectômetro
*/
public static final class Hectometro extends Comprimento {
private Hectometro(double valor) {
super(valor, HM);
}
@Override
public Centimetro emCentimetro() {
return new Centimetro(valor * 10000.0);
}
@Override
public Decametro emDecametro() {
return new Decametro(valor * 10.0);
}
@Override
public Hectometro emHectometro() {
return this;
}
@Override
public Milimetro emMilimetro() {
return new Milimetro(valor * 100000.0);
}
@Override
public Quilometro emQuilometro() {
return new Quilometro(valor / 10.0);
}
}
/**
* Unidade de medida milímetro
*/
public static final class Milimetro extends Comprimento {
private Milimetro(double valor) {
super(valor, MM);
}
@Override
public Centimetro emCentimetro() {
return new Centimetro(valor / 10.0);
}
@Override
public Decametro emDecametro() {
return new Decametro(valor / 10000.0);
}
@Override
public Hectometro emHectometro() {
return new Hectometro(valor / 100000.0);
}
@Override
public Milimetro emMilimetro() {
return this;
}
@Override
public Quilometro emQuilometro() {
return new Quilometro(valor / 1000000.0);
}
}
/**
* Unidade de medida quilômetro
*/
public static final class Quilometro extends Comprimento {
private Quilometro(double valor) {
super(valor, KM);
}
@Override
public Centimetro emCentimetro() {
return new Centimetro(valor * 100000.0);
}
@Override
public Decametro emDecametro() {
return new Decametro(valor * 100.0);
}
@Override
public Hectometro emHectometro() {
return new Hectometro(valor * 10.0);
}
@Override
public Milimetro emMilimetro() {
return new Milimetro(valor * 1000000.0);
}
@Override
public Quilometro emQuilometro() {
return this;
}
}
public static final String KM = "Km";
public static final String HM = "hm";
public static final String DAM = "dam";
public static final String CM = "cm";
public static final String MM = "mm";
public static Centimetro centimetro(double valor) {
return new Centimetro(valor);
}
public static Decametro decametro(double valor) {
return new Decametro(valor);
}
public static Hectometro hectometro(double valor) {
return new Hectometro(valor);
}
public static Milimetro milimetro(double valor) {
return new Milimetro(valor);
}
public static Quilometro quilometro(double valor) {
return new Quilometro(valor);
}
public static <T extends Comprimento> T porAbreviatura(double valor, String abreviatura) {
switch (abreviatura) {
case KM:
return (T) quilometro(valor);
case HM:
return (T) hectometro(valor);
case DAM:
return (T) decametro(valor);
case CM:
return (T) centimetro(valor);
case MM:
return (T) milimetro(valor);
default:
throw new IllegalArgumentException("Abreviatura inválida: \"" + abreviatura + "\"");
}
}
/**
* O valor numérico desta unidade.
*/
public final double valor;
/**
* A abreviatura desta unidade.
*/
public final String abreviatura;
private Comprimento(double valor, String abreviatura) {
this.valor = valor;
this.abreviatura = abreviatura;
}
@Override
public double doubleValue() {
return valor;
}
@Override
public float floatValue() {
return (float) valor;
}
@Override
public int intValue() {
return (int) valor;
}
@Override
public long longValue() {
return (long) valor;
}
/**
* Converte esta unidade para {@link Centimetro}.
*/
public abstract Centimetro emCentimetro();
/**
* Converte esta unidade para {@link Decametro}.
*/
public abstract Decametro emDecametro();
/**
* Converte esta unidade para {@link Hectometro}.
*/
public abstract Hectometro emHectometro();
/**
* Converte esta unidade para {@link Milimetro}.
*/
public abstract Milimetro emMilimetro();
/**
* Converte esta unidade para {@link Quilometro}.
*/
public abstract Quilometro emQuilometro();
@Override
public String toString() {
return String.format("%.2f %s", valor, abreviatura);
}
}