brugohb
Setembro 9, 2015, 6:28pm
#1
Oi Pessoal, sou novo aqui no forum. Agradeço qualquer ajuda de antemão.
Estou tentando pegar uma string, separa-la em letra por letra, e pra cada letra dar um valor.
ex: nome = Joao.
J=6
0=2
a=1
0=2
Consegui pegar uma String e separa-la num:
char[] letras;
letras = name.toCharArray();
porem, nao consigo agora jogar a variavel letras num switch. da um erro.
alguem pode me ajudar?
Até onde lembro Java começou a suportar até switchs com Strings diretamente, não vejo por que não aceitar char, teste o código abaixo:
int numValueOfChar(char c){
switch(c){
case 'a' : return 1;
case 'A' : return 2;
case 'b' : return 3;
default: throw new IllegalArgumentException("char is not a letter");
}
}
igor_ks
Setembro 9, 2015, 7:58pm
#3
Popule um Map, acho que é melhor do que um monte de case
Algo do tipo:
[code]Map<Character, Integer> map = new HashMap<Character, Integer>();
map.put(‘A’, 1);
map.put(‘B’, 2);
map.put(‘C’, 3);
map.put(‘D’, 4);
String palavra = "ABCD";
for (char letra : palavra.toCharArray()) {
System.out.println(map.get(letra));
}[/code]
brugohb
Setembro 9, 2015, 8:17pm
#4
Obrigado igor_ks
é isso mesmo que precisava, funcionou muito legal, porém não consigo exibir no txtField da GUI dentro do loop.
ele só mostra o ultimo valor se eu coloco no loop.
[quote]for (char letra : palavra.toCharArray()) {
txtResult.setText(map.get(letra));
}[/quote]
tem como fazer todos os resultados aparecerem no txtField da GUI? tipo se a String for ABCD aparecer no field 1 + 2 + 3 + 4??
obrigado pela ajuda de todos pessoal, e descukpe o nivel tao iniciante.
[quote=brugohb]Obrigado igor_ks
é isso mesmo que precisava, funcionou muito legal, porém não consigo exibir no txtField da GUI dentro do loop.
ele só mostra o ultimo valor se eu coloco no loop.
[quote]for (char letra : palavra.toCharArray()) {
txtResult.setText(map.get(letra));
}[/quote]
tem como fazer todos os resultados aparecerem no txtField da GUI? tipo se a String for ABCD aparecer no field 1 + 2 + 3 + 4??
obrigado pela ajuda de todos pessoal, e descukpe o nivel tao iniciante.[/quote]
Você tem que adicionar os novos valores ao valor do textField. Toda vez que você usa o set, ele descarta o que tinha antes e define o valor novo.
Muda o seu setText para:
txtResult.setText(txtResult.getText()+map.get(letra))
Se os valores forem sequenciais, lembre-se que as letras já tem valores. Por exemplo:
System.out.println((int)'A'); //Imprime 65
System.out.println((int)'B'); //Imprime 66
Se você quiser que o A seja 0, o B seja 1, e assim por diante, é só subtrair 65 do valor do caracter.
[quote=ViniGodoy]Se os valores forem sequenciais, lembre-se que as letras já tem valores. Por exemplo:
System.out.println((int)'A'); //Imprime 65
System.out.println((int)'B'); //Imprime 66
Se você quiser que o A seja 0, o B seja 1, e assim por diante, é só subtrair 65 do valor do caracter.[/quote]
OU MELHOR basta subitrair ‘a’ do caractere.
int aAsZero = 'a' - 'a';
int bAsOne = 'b' - 'a';