Escreva um programa Java que receba palavras digitadas pelo usuário através do teclado, armazenando apenas as palavras diferentes em uma coleção, até o usuário digitar a palavra fim
5 respostasResolvido
java
V
vynon
Escreva um programa Java que receba palavras digitadas pelo usuário através do teclado, armazenando apenas as palavras diferentes em uma coleção, até o usuário digitar a palavra fim. Em seguida, pela segunda vez, solicite novamente ao usuário para digitar várias palavras até digitar a palavra fim, e após isso, informe quais são as palavras que foram digitadas na segunda vez que encontram-se armazenadas na coleção.
Exemplo:
Digite palavras ou fim para encerrar:
Porta
Notebook
Cama
Lápis
Mesa
fim
Novamente digite palavras ou fim para encerrar:
Porta - Localizado
Borracha - Não localizado
Mar - Não Localizado
Mesa - Localizado
As outras questão que você abriu foram fechadas e essa vai ficar como aberta para solução do seu problema, por favor não abra diversas perguntas para a mesma duvida.
Escreva um programa Java que receba palavras digitadas pelo usuário através do teclado,
armazenando apenas as palavras diferentes em uma coleção, até o usuário digitar a palavra fim.
Em seguida, pela segunda vez, solicite novamente ao usuário para digitar várias palavras até
digitar a palavra fim, e após isso, informe quais são as palavras que foram digitadas na segunda
vez que encontram-se armazenadas na coleção.
ao olhar para as duas coisas acima vêm à mente
como vou obter a entrada do Usuário
Como obter palavras da lista de palavras
Como sempre, há mais que uma maneira de resolver um problema
O Java recomenda a utilização da consola java.io.para obter a entrada do utilizador
Outra maneira poderia ser usar a classe Scanner ou passando o System.in para
um leitor de InputStream que está embrulhado num leitor de buffer
Eu faço uso de duas dessas classes, o Console e leitor buffer para mostrar como
Eu aplicava-os.
note to make use of the Console, I start the compile progras a
java java com.email.roloje777.userinput.Aplicação, dado que o Eclpse não carrega a consola
else just change userInput1( set1); to userInput2 (set1);
Mais uma vez, há muitas maneiras de fazer isso, mas a classe set Collection vem à mente aqui
Pode-se fazer operações como união e intersecção em “sets”
set1.addAll (set2) é uma união de dois “sets”
set1.retainAll (set2) é uma intersecção dos dois conjuntos.
abaixo do Código
cumprimentos
*/
public class App {
privatestaticvoiduserInput1(Set<String>set){Consoleconsole=System.console();// Factory method, creates an instance of java.io.Consoleif(console!=null){Stringword=null;System.out.println("Enter the word [end to exit]");while(!(word=console.readLine()).equalsIgnoreCase("end")){if(word==null||word.length()==0){System.out.println("Its not a valid word, try again");}set.add(word);}}else{thrownewRuntimeException("Error on obtaining the console");}}privatestaticvoiduserInput2(Set<String>set){try(BufferedReaderin=newBufferedReader(newInputStreamReader(System.in))){Stringword=null;System.out.println("Enter the word [end to exit]");while(!(word=in.readLine()).equalsIgnoreCase("end")){if(word==null||word.length()==0){System.out.println("Its not a valid word, try again");}set.add(word);}}catch(IOExceptione){thrownewRuntimeException("Error on obtaining the keyboard");}}publicstaticvoidmain(String[]args){Set<String>set1=newHashSet<>();Set<String>set2=newHashSet<>();System.out.println("Entering first list of words");userInput1(set1);System.out.println("Entering second list of words");userInput2(set2);System.out.println("set1 = "+set1);System.out.println("set2 = "+set2);set1.retainAll(set2);//// creates an intersection of the set1 with set2System.out.println("set1 union set2 = "+set1);}
}
W
wldomiciano1 like
A solução que o @Joao_Emanuel_Monica apresentou dá pra ficar ainda mais compacta usando Streams:
importjava.util.HashSet;importjava.util.Scanner;importjava.util.Set;importjava.util.stream.Collectors;importjava.util.stream.Stream;publicclassMain{privatestaticSet<String>run(finalScannerscan,finalStringmessage){System.out.println(message);// @formatter:offreturnStream.generate(scan::nextLine).takeWhile(str->!str.equalsIgnoreCase("fim")).collect(Collectors.toUnmodifiableSet());// @formatter:on}publicstaticvoidmain(String[]args){try(finalvarscan=newScanner(System.in)){finalvara=run(scan,"Entre com o primeiro conjunto de números");finalvarb=run(scan,"Entre com o segundo conjunto de números");finalvarc=newHashSet<String>(a);c.retainAll(b);System.out.printf("1º conjunto: %s\n",a);System.out.printf("2º conjunto: %s\n",b);System.out.printf("Intersecção: %s\n",c);}}}
Mas se vc não puder usar o Set e tiver que se virar com ArrayList, daria pra fazer assim: