Tokenização com Scanner

  1. import java.util.*;
  2. class Brain{
  3. public static void main(String[] args){
  4. //INSIRA O BLOCO DE CÓDIGO AKI…
  5. }
  6. }

Qual opção inserida independentemente na linha 5 compila e produz a saída “123 82”?(MARQUE TODAS CORRETAS)

OPÇÕES:
A) Scanner sc = new Scanner(“123 A C, 45 X5X, 76 82 L”);
while(sc.hasNextInt()) System.out.print(sc.nextInt() + " ");

B) Scanner sc = new Scanner(“123 A C, 45 X5X, 76 82 L”).useDelimiter(" ");
while(sc.hasNext()) System.out.print(sc.nextInt() + " ");

C) Scanner sc = new Scanner(“123 A C, 45 X5X, 76 82 L”);
while(sc.hasNext()){
if(sc.hasNextInt()) System.out.print(sc.nextInt() + " ");
else sc.next(); }

D) Scanner sc = new Scanner(“123 A C, 45 X5X, 76 82 L”).seDelimiter(" ");
while(sc.hasNext()){
if(sc.hasNextInt()) System.out.print(sc.nextInt() + " ");
else sc.next(); }

E) Scanner sc = new Scanner(“123 A C, 45 X5X, 76 82 L”);
do{
if(sc.hasNextInt()) System.out.print(sc.nextInt() + " ");
}while (sc.hasNext() );

F) Scanner sc = new Scanner(“123 A C, 45 X5X, 76 82 L”).seDelimiter(" ");
do{
if(sc.hasNextInt()) System.out.print(sc.nextInt() + " ");
}while (sc.hasNext() );

RESPOSTA: C e D.

Alguem poderia dar uma força nessa resposta, ja revisei o assunto mas não compreendi muito bem…

vlw t+

bom, sou novato no java mas tentarei esclarecer isso pra vc =]

na verdade, nenhuma das respostas te da a saida “123 82”, talvez a saida correta seria a sequencia de inteiros dentro da string (“123 45 76 82”), ai sim vc teria a C e a D como corretas…

por partes:

em primeiro lugar, utilizar o metodo useDelimiter(" ") é a mesma coisa que utilizar o default delimiter (que é o caracter espaço)

A) sc.hasNextInt() não avança o ponteiro para o proximo resultado, apenas verifica se o proximo resultado pode ser um inteiro, então a saída é apenas “123”

B) este código gera uma exceção do tipo InputMismatchException, pq após exibir o token “123”, o proximo token dentro do Scanner (a letra “A”) não pode ser um int e é tratado como um pelo método nextInt()

C e D) aqui você consegue obter a sequencia “123 45 76 82”, pois utilizando sc.next() vc consegue avançar dentro dos tokens do scanner… veja que esta sequencia não é a sequencia do enunciado, porisso a questão pode estar bugada :smiley:

E e F) nestes 2 códigos vc tem um loop infinto pq o método hasNext() dentro do while apenas verifica se há um novo token, mas não avança o ponteiro

e por favor me corrijam se estiver algo errado
vlw =]

Esta questão é do livro da Kathy Sierra em português??

Engraçado, tem uma questão praticamente igual a essa no livro em inglês. Só que a String é “123 A 3b c,45, x5x,76 82 L”.

A resposta está como C e D também.

Talvez seja um erro no livro traduzido.

arrumei o livro em portugues mas ja to me arrependendo com tantos erros grosseiros e distorcoes da versao em portugues :frowning:

Desculpem não ter postado antes é que tava sem net e parece q vou ficar denovo… #) a resposta é C e F…

=]

O livro em português as vezes não é muito claro é preciso reler algumas vezes para poder compreender a tradução.

mesmo assim cara não tem como sair aquilo que voce falow cara … como nosso amigo OrGg falow a saida seria todos os inteiros que voce passou no construtor do Scanner(“123 A C, 45 X5X, 76 82 L”); dai sim a resposta seria C e D…

Vou rever a questão.

O livro em portugues não é TAO diferente do ingles, existem algumas diferenças mas nada que faça do livro um impecilho pro estudo, muito pelo contrário ajuda da mesma forma que o livro em ingles se estudado de forma correta
=)