• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sir Pereira

Deixar correr...

6 mensagens neste tópico

Ora bem, estou a fazer um simples programa que pergunta os dados ao utilizador, ele escreve e no fim apresenta-os todos.

O problema é que não me quer deixar que o user ponha a localidade..

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.util.Scanner;
/**
*
* @author Ivo
*/

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.print("|''''''''''''''''''''''''''''''''''''''''''''|\n");
        System.out.print("|-----------Powered by: Ivo Pereira----------|\n");
        System.out.print("|''''''''''''''''''''''''''''''''''''''''''''|\n");
        System.out.print("|                                            |\n");
        System.out.print("|              My first Java app             |\n");
        System.out.print("|            Made in Netbeans IDE            |\n");
        System.out.print("|____________________________________________|\n");
        System.out.print("Digite o seu nome: \n");
        String nome = s.nextLine();
        System.out.print("Digite a sua idade: \n");
        int idade = s.nextInt();
        System.out.print("Digita a sua localidade: \n");
        String localidade = s.nextLine();

        System.out.print("Nome: " + nome + "\nIdade: " + idade + " anos\nLocalidade: " + localidade);
    }

}

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa classe usa uns métodos um pouco estranhos :)

Estranho no sentido em que não lêem o input e descartam o conteúdo do buffer ou mesmo permitem esvaziar o buffer de forma simples. O que  está a acontecer é que estão a ficar dados no buffer que não são lidos logo, sendo guardados para serem lidos mais tarde.

Vou tentar explicar melhor:

Quando invocas pela primeira vez o método nextLine() o que acontece é que o ponteiro do buffer avança até depois de um \n. Quando invocas o nextInt(), vai ser usada uma expressão regular para ler o valor introduzido, pelo que o scanner irá ler até que encontre algo que não é um dígito, neste caso vai ler até encontrar o \n que é introduzido quando carregas no enter depois de colocares os números e que está no fim da linha. Quando a seguir invocas novamente o método nextLine(), dado que este vai procurar um 1n e ficou um no buffer que não foi lido, o método encontra logo algo para ler, e devolve-te o que está antes do \n encontrado, como o que estava antes do \n eram os números que foram consumidos anteriormente, ele devolve-te uma string vazia.

Logo, está a fazer exactamente o que mandaste ;)

Se, por exemplo, experimentares colocar uma invocação ao método nextLine() imediatamente depois de leres o inteiro, vais ver que já te deixar ler a localidade.

Não costumo trabalhar com este tipo de classe e não conheço os seus métodos em profundidade por isso neste momento não posso ser grande ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa classe usa uns métodos um pouco estranhos :)

Estranho no sentido em que não lêem o input e descartam o conteúdo do buffer ou mesmo permitem esvaziar o buffer de forma simples. O que  está a acontecer é que estão a ficar dados no buffer que não são lidos logo, sendo guardados para serem lidos mais tarde.

Vou tentar explicar melhor:

Quando invocas pela primeira vez o método nextLine() o que acontece é que o ponteiro do buffer avança até depois de um \n. Quando invocas o nextInt(), vai ser usada uma expressão regular para ler o valor introduzido, pelo que o scanner irá ler até que encontre algo que não é um dígito, neste caso vai ler até encontrar o \n que é introduzido quando carregas no enter depois de colocares os números e que está no fim da linha. Quando a seguir invocas novamente o método nextLine(), dado que este vai procurar um 1n e ficou um no buffer que não foi lido, o método encontra logo algo para ler, e devolve-te o que está antes do \n encontrado, como o que estava antes do \n eram os números que foram consumidos anteriormente, ele devolve-te uma string vazia.

Logo, está a fazer exactamente o que mandaste ;)

Se, por exemplo, experimentares colocar uma invocação ao método nextLine() imediatamente depois de leres o inteiro, vais ver que já te deixar ler a localidade.

Não costumo trabalhar com este tipo de classe e não conheço os seus métodos em profundidade por isso neste momento não posso ser grande ajuda.

Vou experimentar.

Então o que usas para ler dados de input?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não costumo fazer programas que sejam apenas de consola ou que leiam do standard input, isso era no tempo em que programava em C :)

Mas se tiver de ler dados, uso as classes para trabalhar streams mas não uso essas classes que supostamente são um utilitário. A classe Scanner, PrintWriter e PrintStream são classe de apoio à leitura e formatação de dados, a primeria serve para ler dados de streams dividindo-as em pequenos pedaços que possam ser traduzido individualmente, os chamados tokens, e usa muito expressões regulares para saber o que ler, as últimas duas são classes de apresentação.

Normalmente uso BufferedReader, BufferedWritter, BufferedInputStream, BufferedOutputStream, FileReader InputStream, OutputStream, FileWritter, enfim uso-as quase todas menos as que indiquei acima.

Nota que não digo que seja melhor ou pior, apenas que não uso essas classes de ajuda, nunca me habituei e nunca precisei da "ajuda" que elas davam.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm ok... já agora, fazer a parte gráfica é muito complicado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nem por isso, existem alguns pormenores que não existem da mesma forma em VB, como o caso de layout managers, mas se usares o Netbeas, por omissão o designer está a usar Free Layout, o que é bastante bom e nem precisas perceber que ele lá está ;)

Se usares o designer é simples, se não usares o único problema é que precisas conhecer muitas classes e dá jeito saberes programar minimamente na plataforma :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora