Naturalmente vem a pergunta, para que armazenar só um caractere?
Se há tipos para armazenar números, strings e textos, o que vamos fazer com um caractere?
Tipo char: O que é? Onde é usado ?
"Pressione S para sim ou N para não""Pressione alguma tecla para para continuar..."
Ou em jogos...nunca notou que no counter-strike que para ir para o lado esquerdo basta pressionar uma das setas (ou 'a' ou 'd').
E para o Mário Bros pular ou soltar o fogo?
Muitas vezes não precisamos de um arquivo de texto inteiro ou string, mas de simplesmente um caractere.
Declaração do tipo char
char nome_do_char = 'a';onde poderíamos substituir 'a' por qualquer caractere alfanumérico, caso tenhamos declarado assim.
Sim, podemos declarar de outra maneira. Os caracteres podem ser representados por inteiro também.
char letra_J = 74;
char letra_P = 80;
E dentro do printf, representamos o char por %c, para efeitos de formatação.
Vamos imprimir as iniciais do site, veja:
public class Tipos {
public static void main(String[] args){
char letra_J = 74;
char letra_P = 80;
System.out.printf("%c %c\n",letra_J, letra_P);
}
}
run:
J P
BUILD SUCCESSFUL (total time: 0 seconds)
Mas como eu adivinhei que 'J' é 74 e 'P' é 80? Qual a Matemática ou magia pra saber isso?
Tabela ASCII, que são uma forma universal de representação do caracteres por meio de números, seja decimal, hexadecimal ou octal.
Esses números são a representação decimal dos caracteres, confira a tabela abaixo:
Na verdade, essa representação é humana. Para diversos tipos de numeração.
Existe extensão dessa tabela para os chineses, para os indianos e outros povos com diferentes caracteres. E pros computadores?
Computador é macho, pra ele é tudo número, é tudo bit!
Representação é coisa humana.
Misturei tudo, veja só:
public class Tipos {
public static void main(String[] args){
int numero_J = 74;
char letra_J = (char) numero_J;
char letra_P = 80;
char letra_i = 'i';
System.out.printf("%c%c%c%c %c%c%c%c%c%c%c%c%c%c%c\n",
letra_J,97,118,97, letra_P, 'r',
111,103,114,101,'s','s',letra_i,
118, 111);
}
}
Não poderíamos simplesmente igualar um char a um inteiro:
letra_J = numero_J
Então fizemos um cast: char letra_J = (char) numero_J;
Que nada mais é que dizer ao Java para representar o próximo tipo de uma outra forma.
No caso, estamos dizendo 'Hey, Java, brother, não veja o numero_J como inteiro, veja como char. Eu sei que declarei como char, mas é só dessa vez, ok?'.
Para ver mais caracteres e magias numéricas:
http://www.asciitable.com/
http://www.tamasoft.co.jp/en/general-info/unicode.html
http://pt.wikipedia.org/wiki/ASCII
Como armazenar um caractere (char) que o usuário digitou
Usamos, obviamente, a classe Scanner para receber um caractere do usuário.
Porém, há uma pequena diferença. Usaremos o método 'nextLine()' que recebe uma string do usuário, porém como queremos um caractere, usaremos o 'charAt(0)' para receber apenas um caractere (ou o primeiro elemento da string).
Veja como se faz:
Scanner entrada = new Scanner(System.in);
char caractere;
caractere = entrada.nextLine().charAt(0);
3 comentários:
Quando eu uso :
Scanner entrada = new Scanner(System.in);
char caractere;
int num1;
caractere = entrada.nextLine().charAt(0);
num1 = entrada.nextInt();
funciona ok
quando é :
Scanner entrada = new Scanner(System.in);
char caractere;
int num1;
num1 = entrada.nextInt();
caractere = entrada.nextLine().charAt(0);
da erro.
qual o motivo ?
Eu tentei identificar. O erro diz que a posição 0 está fora do alcance da string (Como se estivéssemos tentando acessar a posição 15 de uma string com 10 posições apenas), mas infelizmente não sei dar uma explicação do porque isso ocorre.
Quando um nextLine() vem depois de um nextInt(), há uma quebra de linha que precisa ser removida do nextInt(). A solução é inserir um sc.nextLine() entre os dois para remover essa quebra de linha. Particularidades do Java...
O código funcionaria com a seguinte modificação:
Scanner entrada = new Scanner(System.in);
char caractere;
int num1;
num1 = entrada.nextInt();
sc.nextLine();
caractere = entrada.nextLine().charAt(0);
Postar um comentário