JavaDreams:
guhzantut:
JavaDreams:
Amigo sempre que for trabalhar com a classe Scanner para ler uma entrada do usuário no teclado
você usa o método nextLine()
O correto seria:
public static void main(String[] args) {
Scanner entrada=new Scanner(System.in);
String nomeCompleto = entrada.nextLine();
String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
System.out.println(nomeSeparado[0]);
System.out.println(nomeSeparado[1]);
System.out.println(nomeSeparado[2]);
// TODO code application logic here
}
Ou seja para o programa acima funcionar você tem que colocar a linha
String nomeCompleto = entrada.nextLine();
Uma dica valiosa que você pode colocar no seu programa
para que não seja necessário se preocupar em indicar
o tamanho do vetor e a posição exata, e também evitar
o exception de nullPointer
Faça o código da seguinte maneira:
public static void main(String[] args) {
Scanner entrada=new Scanner(System.in);
String nomeCompleto = entrada.nextLine();
String[] nomeSeparado = new String[10];
nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
for(int cont=0; cont < nomeSeparado.length; cont++){
System.out.println(nomeSeparado[cont]);
}
}
Fazendo dessa maneira, o for vai dar loop somente enquanto a contadora cont
for menor que o tamanho exato do seu vetor.
Mas lembre-se que tamanho é diferente de index, ou seja
um vetor de tamanho 10
tem o index começando em 0 e terminando em 9.
Por isso o for vai funcionar enquanto a cont for menor que 10
e assim não dando erro de nullPointer.
Se tiver dúvida pode perguntar.
Abraço.
eu precisaria collocar esse 10? nao estaria limitando o numero de sobrenomes?
Até onde eu sei fica assim:
Se você for mecher com o tipo Vetor sim.
Se você for mecher com o tipo Estrutura não.
vetor:
String[] nomeSeparado = new String[10];
Estrutura ArrayList:
ArrayList lista = new ArrayLista();
A diferença está no fato de que o tipo Vetor não tem um método
que o permita aumentar de tamanho quando for necessário, ou seja,
quando seus itens estiverem todos preenchidos.
Já o ArrayList tem em sua própria estrutura ferramentas/métodos
que lhe permitem aumentar de tamanho quando necessário.
Inclusive por isso que quando queremos adicionar um elemento no ArrayList
basta fazermos.
lista.add(elemento);
até onde eu sei, dentro da estrutura do ArrayList ele tem uma ferramenta
que vai mapeando o que for necessário para sempre ele ter espaço.
Mas aí entra em um assunto que é complexo e que não vem ao caso
pois acredito que nem eu nem você vamos ser engenheiros de software
e por isso não aprofundo tanto em saber ou explicar o funcionamento interno
do ArrayList ou saber como as coisas acontecem dentro dele.
Para guardar fácil é o seguinte:
Vetor => você sempre tem que passar o tamanho dele na declaração, senão
não vai conseguir usar. Sempre tem que dizer a posição de index que quer
pegar ou alterar na hora que for fazer algo.
ArrayList => Não precisa se preocupar em dizer o seu tamanho quando o for criar
e nem quando for adicionar um novo elemento, se preocupar se vai caber ou não,
pois ele internamente já possui métodos/ferramentas que aumentam o espaço
alocado em memória de acordo com a necessidade para que não dê nullpoint
quando o seu programa estiver rodando.
Lembrando que uma vez eu vi um cara que fez um vetor que aumentava o seu tamanho
manipulando ponteiros de memória e outras coisas mais. Mas na minha opinião essa prática
não é recomendada em Java por questões de segurança e de OO.
Não usei termos muito técnicos e nem aprofundei muito nisso ou naquilo pois só iria
ficar mais complexo...
A melhor dica que te dou é para ler o livro Java Use a Cabeça, pois ele exemplifica muito
bem o que é cada coisa e mostra com muitos desenhos as coisas acontecendo.
Se eu me lembro bem isso está no capítulo 3 do livro mais ou menos.
Abraço.
A instanciação de uma instância de objeto vetor (todo vetor em java é um Objeto) pode ser feita assim
String vetor[] = new String[10];
Ou assim
String vetor[] = new String[]{"ABC", "CDS", "DDD"};
Ou, quando temos um método cujo retorno é um array do tipo esperado, como o método split, da classe java.lang.String
String[] vetor = valorRecebido.split(" ");
Logo, dependendo de como você for desenvolver é que vai verificar a necessidade.
Porém, se optar por usar o split realmente, evite isto
String[] nomeSeparado = new String[10];
nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
Como você não sabe quantas palavras formam o nome da pessoa, é uma má prática definir o tamanho do array.
Prefira isso
String[] nomeSeparado = nomeCompleto.split("\\s"); // "\\s" regex para espaco em branco
Bem mais simples e direto.
P.S.: Para não fugir do estigma de chato e inconveniente, lembro que não existe a palavra "mecher", ela é resultado de um erro crasso ao tentar referir a palavra mexer.
Dúvidas? Veja