Read() que retorna char

Olá, estou começando Java agora, tenho uma dúvida daquelas bem tosca.

Simples, quero pedir que o usuário digite uma letra e o programa pegue esse caracter em char

estou fazendo assim:

[code]DataInputStream Ent = new DataInputStream(System.in);
String inputstr="";
char ch;

//Em algum sites diziam pra por o try, dai coloquei pô
try {
inputstr = Ent.readLine();
}
catch (Exception erro){
System.out.println (“Erro de Leitura”);
}

/* Apenas teste para transformar em Inteiro
int i;
i = Integer.valueOf(inputstr).intValue(); */

/* Quero CHARRR, po era tão simples no Pascal, Qbasic, C/C++ e até na bosta dos arquivos .bat (choice querido) */[/code]

Att

Quiá quiá quiá - aquela rotina que em C++ se chama “getch” e você tinha de importar < conio.h > (lê exatamente um caracter) não existe em Java. Parece besteira, mas não tem mesmo.
Outra coisa que parece besteira e não tem é uma forma de entrar senhas via console.
Até em uma ferramenta da Sun, chamada keytool, você entra com a senha e ela é mostrada para todo mundo ver.
Você tem de pedir para o usuário teclar ENTER pelo menos uma vez, ou então fazer uma aplicação gráfica.
Se você pode mudar a especificação (o usuário deve digitar uma letra e teclar Enter) você pode usar readLine (retorna uma String), usar trim nessa string (para limpar espaços em branco, tabs etc.) e checar a string (use .startsWith se você for simplesmente checar uma opção.) Se você quer pegar a primeira letra, e sabe que a String tem pelo menos um caracter (.length() > 0), use .charAt (0), que lhe retorna o primeiro caracter.

Meu q bosta, era só pra ter uma opção tipo “Continuar…[S/N]” bem básico, q linguagem mais de pedrero, quero CCCCCCC, e tipo tem como dar um intervalo no meio do programa para o usuario pressionar alguma tecla? tipo o return(0) do C/C++ ou o Readln; do querido tio Pascall ou até o Pause do .bat ou qualquer comando simples que qualquer linguagem por mais boba q seja tenha.

Quando o James Gosling inventou o Java, ela se chamava “OAK”, e essa linguagem era para ser usada em dispositivos como “set-top boxes” e outras coisas mais esquisitas . Um “set-top box” é algo parecido com aquela caixinha que você precisa para poder captar TV a cabo ou por satélite.
Nesses dispositivos não tinha teclado, nem mouse, muito menos terminal VT-100 (que é a base do Unix). Mesmo o “Hello, world” é esquisito, se você pensar bem:

class HelloWorld {
    public static void main(String[] args) {
        System .out .println ("Hello, world!");
    }
}

Em C isso é

#include <stdio.h>
main () {
    printf ("Hello, world!\n");
}

E ele pensava em C puro, onde não existe a tal função que lê só um caracter. (getch de < conio.h > é uma aberração que apareceu no DOS ; não é do Unix). Por isso é que nem se lembrou dessa funçãozinha.

(Antes que alguém me bata falando que dá para ler um caracter com C no Unix: dá sim, mas precisa de um pouco de esforço - não é tão bobo quanto o getch do DOS, normalmente você precisa de uma biblioteca como o Curses ou então usar alguns comandos IOCTL e outras coisas mais esquisitas.)
O getchar() do C padrão é meio parecido com o int read() do Java, que precisa de alguém digitando ENTER para que o programa possa entender o que está acontecendo.

Estou vendo que você precisa escrever uma aplicação modo console que trabalhe em um terminal VT100 ou ANSI. Nesse caso,

a) Deve haver um ‘port’ da biblioteca Curses para Java, procure (o Curses é meio chato de usar, e pelo nome você pode esperar coisas ‘amaldiçoadas’ - curse em inglês é curso, mas também maldição)

b) Ou então escolha uma linguagem que lhe permita essas coisas - aquelas bem antiguinhas, mas que funcionam bem com terminais VT100.

Bem na verdade estou aprendendo a linguagem apenas por aprender, acho que ela não é voltada a esse tipo de coisas (então meus antigos joguinhos em modo caracter vão ficar no baú).

Ei tingol, vi que vc conheçe um pouco então, sabe me dizer se java é bom pra Banco de Dados ou mesmo para aplicativos com inferface gráfica, se não, afinal pra que serve essa droga de java, a empresa onde trabalho (que usa progress) decidiu migrar tudo pra java, e vamos sofrer hehehe…

Este tratamento de leitura de dados de um terminal, apesar de trabalhoso, me parece ser muito seguro e traz consigo uma “filosofia” interessante. Afinal, tudo o que você digita num terminal são, na prática, strings (cadeias de caracteres) e, assim sendo, nada mais consistente do que o programa em questão tratar os dados de entrada como tais e depois fazer as conversões necessárias.

Deixem-me tentar esboçar uma versão mais atual para a listagem acima (seguindo a sugestão da Sun de não usar mais o método readLine() da classe DataInputStream):

[code] // Na minha opinião, esta é a única parte verdadeiramente chata da listagem:
BufferedReader keyboardInput = new BufferedReader( new InputStreamReader( System.in ) );

String input = “0”;

try
{
input = keyboardInput.readLine()
}
catch ( IOException error )
{
System.out.println( “Erro de leitura!” )
}

/* Para capturar o primeiro caracter da entrada:
(não me lembro se é necessário fazer algum tratamento
em relação ao caracter de quebra de linha,
introduzido ao se pressionar a tecla
ao final da entrada do dado) */
char fisrtChar = input.charAt( 0 )

// Se estiver lendo números inteiros:
try
{
int myIntValue = Integer.parseInt( input )
}
catch ( NumberFormatException errorInt )
{
System.out.println( “Não consegui fazer a conversão para inteiro!” )
}

// Se estiver lendo números reais:
try
{
double myDoubleValue = Double.parseDouble( input )
}
catch ( NumberFormatException errorDouble )
{
System.out.println( “Não consegui fazer a conversão para double!” )
}

// E assim por diante…[/code]

Valeu Operador Nabla , sua ajuda foi muito útil, apesar de saber que o modo caracter naum é muito legal em java, acho q ate em Clipper era melhor de trabalhar hehehe