Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

O tipo char: armazenando e representando caracteres

O tipo de dado char serve para armazenar um caractere (o char vem de character, que é caractere em inglês), e por essa função simples tem o tamanho do tipo short.

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:

Apostila de Java grátis


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:

Unknown disse...

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 ?

Unknown disse...

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.

Caio Guedes, Carlos Antero e André Luiz disse...

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

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo


Tutoriais de Java