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 {
private static void userInput1(Set<String> set) {
Console console= System.console(); // Factory method, creates an instance of java.io.Console
if(console != null) {
String word = 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 {
throw new RuntimeException("Error on obtaining the console");
}
}
private static void userInput2(Set<String> set) {
try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in))){
String word = 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(IOException e){
throw new RuntimeException("Error on obtaining the keyboard");
}
}
public static void main(String[] args) {
Set<String> set1 = new HashSet<>();
Set<String> set2 = new HashSet<>();
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 set2
System.out.println("set1 union set2 = " +set1);
}
A solução que o @Joao_Emanuel_Monica apresentou dá pra ficar ainda mais compacta usando Streams:
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
private static Set<String> run(final Scanner scan, final String message) {
System.out.println(message); // @formatter:off
return Stream.generate(scan::nextLine)
.takeWhile(str -> !str.equalsIgnoreCase("fim"))
.collect(Collectors.toUnmodifiableSet()); // @formatter:on
}
public static void main(String[] args) {
try (final var scan = new Scanner(System.in)) {
final var a = run(scan, "Entre com o primeiro conjunto de números");
final var b = run(scan, "Entre com o segundo conjunto de números");
final var c = new HashSet<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:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class App {
public static void main(String... args) {
final List<String> a = new ArrayList<>();
final List<String> b = new ArrayList<>();
final List<String> c = new ArrayList<>();
try (final Scanner scan = new Scanner(System.in)) {
System.out.println("Primeiro");
while (true) {
final String str = scan.nextLine();
if (str.equalsIgnoreCase("fim"))
break;
else if (!a.contains(str))
a.add(str);
}
System.out.println("Segundo");
while (true) {
final String str = scan.nextLine();
if (str.equalsIgnoreCase("fim"))
break;
else if (!b.contains(str))
b.add(str);
}
}
for (final String str : a)
if (b.contains(str))
c.add(str);
System.out.printf("1º conjunto: %s\n", a);
System.out.printf("2º conjunto: %s\n", b);
System.out.printf("Intersecção: %s\n", c);
}
}