Dúvidas sobre Java

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);
	}
}