Como faço para criar uma variável tipo:
String Centímetro “CM” ;
Mas sem utilizar String?
Como faço para criar uma variável tipo:
String Centímetro “CM” ;
Mas sem utilizar String?
Como assim sem usar String? Quer criar a variável sem declarar o tipo? Por que precisa disso?
Abraço.
Olá bem… eu queria utilizar tipo uma variável que faça a mesma coisa que o String tipo Char mas tem que ser de 1-4 letras ou mais.
Quero fazer uma calculadora que converta por exemplo metro para hectômetro…
Ai faço assim declaro
public static char S1;
public static char S2;
public static char a;
public static char Metro =‘M’ ;
public static char Hectometro =‘H’ ; //Quero declarar “HM” mas sem usar string.
E por que você não pode utilizar Strings?
Porque nao consigo fazer oque eu quero com elas
E o que é isso que queres fazer e não consegues?
Talvez se explicares o teu problema seja mais fácil de ajudar.
String serve exatamente pra isso. Se você quer todos os benefícios da classe String sem usar a classe String, vai ter que criar sua própria classe que faça a mesma coisa que String, e isso não é exatamente trivial.
Supondo que esse é o problema que você quer resolver, você precisa usar os tipos apropriados. Acho que a sua confusão é como separar o que é exibido pro usuário (valores com as devidas unidades) do que é usado internamente no programa (números).
Por exemplo, uma vez que a conversão que você quer é entre números que podem ter partes decimais, é mais coerente usar tipos como float ou double.
float numeroASerConvertido = 453f;
float numeroConvertidoParaHM = numeroASerConvertido / 100f; // 1HM = 100M
A exibição então é algo separado de tudo isso. Pode ser algo como:
System.out.println(new DecimalFormat("#.####").format(numeroConvertidoparaHM) + "HM");
PS: há outras formas de formatar a exibição, esse é um exemplo apenas.
Se você quer ter a possibilidade de fazer múltiplas conversões, pode ter uma lista das conversões suportadas, e os respectivos fatores de conversão, ou mesmo (se quiser algo mais complexo) criar classes auxiliares para cada tipo de conversão.
Abraço.
Cria sua própria classe para conversão de unidades.
Exemplo:
import unidades.Unidade;
import unidades.Unidade.Hectometro;
import unidades.Unidade.Metro;
public class Exemplo {
public static void main(String[] args) {
Metro m = Unidade.metro(50);
Hectometro hm = m.toHectometro();
System.out.printf("%s m equivalem à %s hm%n", m, hm);
hm = Unidade.hectometro(25);
m = hm.toMetro();
System.out.printf("%s hm equivalem à %s m%n", hm, m);
}
}
Saída do programa acima:
50.0 m equivalem à 0.5 hm
25.0 hm equivalem à 2500.0 m
Fonte da classe Unidade
:
package unidades;
@SuppressWarnings("serial")
public abstract class Unidade extends Number {
public static final class Hectometro extends Unidade {
protected Hectometro(double valor) {
super(valor);
}
@Override
public Hectometro toHectometro() {
return this;
}
@Override
public Metro toMetro() {
return new Metro(valor * 100.0);
}
}
public static final class Metro extends Unidade {
protected Metro(double valor) {
super(valor);
}
@Override
public Hectometro toHectometro() {
return new Hectometro(valor / 100.0);
}
@Override
public Metro toMetro() {
return this;
}
}
public static Hectometro hectometro(double valor) {
return new Hectometro(valor);
}
public static Metro metro(double valor) {
return new Metro(valor);
}
public final double valor;
protected Unidade(double valor) {
this.valor = valor;
}
@Override
public double doubleValue() {
return valor;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj != null && obj.getClass().equals(this.getClass())) {
Unidade that = (Unidade) obj;
return Double.doubleToLongBits(this.valor) == Double.doubleToLongBits(that.valor);
}
return false;
}
@Override
public float floatValue() {
return (float) valor;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(valor);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public int intValue() {
return (int) valor;
}
@Override
public long longValue() {
return (long) valor;
}
public abstract Hectometro toHectometro();
public abstract Metro toMetro();
@Override
public String toString() {
return String.valueOf(valor);
}
}
Podes usar uma enum e aproveitar o facto que as conversões são sempre em potências de 10
enum Unit {
KM(-3),
HM(-2),
DAM(-1),
M(0),
DM(1),
CM(2),
MM(3);
private int power;
Unit(int power) {
this.power = power;
}
public double convertTo(Unit otherUnit, double value) {
return value * Math.pow(10, otherUnit.power - power);
}
}
E aplicando:
public class Converter {
public static void main(String[] args) {
double m = 50;
double hm = Unit.M.convertTo(Unit.HM, m);
System.out.printf("%.2f m equivalem a %.2f hm%n", m, hm);
hm = 50;
m = Unit.HM.convertTo(Unit.M, hm);
System.out.printf("%.2f hm equivalem a %.2f m%n", hm, m);
}
}