2
respostas

Desafio: Hora da Prática

Desafio 1:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import static java.lang.System.exit;

public class Numero {
private int numero;

List<Integer> numerico = new ArrayList<>();
Scanner sc = new Scanner(System.in);

//Construtor
public Numero(int numero) {
this.numero = numero;
}
//Método entrada Dados
public void entrarDados() {
int opcao = 1;
do {
System.out.println("Selecione a opção abaixo: ");
System.out.println("1 => Entrar dados");
System.out.println("2 => Listar dados");
System.out.println("0 => Sair");
int selecao = sc.nextInt();
switch (selecao) {
case 1:
 System.out.println("Insira o numero: ");
this.setNumero(sc.nextInt());
numerico.add(this.getNumero());
for (int i = 0; i < numerico.size(); i++) {
System.out.println(i + " - " + "Numero: " + "(" + numerico.get(i) + ")"
 + " cadastrado!");
}
break;
case 2:
 Collections.sort(numerico);
System.out.println("\nNUMEROS ORDENADOS - CRESCENTE");
System.out.println("Numero: " + numerico);
break;
case 0:
System.out.println("Saindo do programa...");
exit(0);
break;
}

} while (opcao == 1);
}

//Getters / Setters
public int getNumero() {
return numero;
}

public void setNumero(int numero) {
this.numero = numero;
}
}

Desafio 2:

import java.util.*;
import static java.lang.System.exit;

public class Titulo implements Comparable <Titulo> {
private String nome;
private String outroNome;

List<String> titulo = new ArrayList<>();
Scanner sc = new Scanner(System.in);

//Construtor
public Titulo(String nome) {
this.nome = nome;
}

//Sobrecarga método toString
@Override
public String toString() {
return "Titulo: " + " - " + this.getNome().toString();
}

//Método entrada de Dados
public void entrarDados() {
int opcao = 1;
do {
System.out.println("\n===== ENTRADA DE TITULOS =====");
System.out.println("1 - CADASTRAR TITULO");
System.out.println("2 - LISTAR TITULO");
System.out.println("0 - SAIR");
int selecao = sc.nextInt();
switch (selecao) {
case 1:
System.out.println("Insira o Titulo: ");
this.setNome(sc.next());
titulo.add(this.getNome());
for (int i = 0; i < titulo.size(); i++) {
System.out.println(i +  " - " + "Titulo: " + titulo.get(i).toString());
}
break;
case 2:
//em desenvolvimento;
break;
case 0:
System.out.println("Saindo do programa...");
exit(0);
}
} while (opcao == 1);
}

//Getters e Setters
public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

//Sobrecarga Método Comparable
@Override
public int compareTo(Titulo outroTitulo) {
return this.outroNome.compareTo(outroTitulo.outroNome);
}
}

Desafio 3:

import java.util.*;
import static java.lang.System.exit;

public class Titulo implements Comparable <Titulo> {
private String nome;
private String outroNome;

List<String> titulo = new ArrayList<>();
Scanner sc = new Scanner(System.in);

//Construtor
public Titulo(String nome) {
this.nome = nome;
}

//Sobrecarga método toString
@Override
public String toString() {
return "Titulo: " + " - " + this.getNome().toString();
}

//Método entrada de Dados
public void entrarDados() {
int opcao = 1;
do {
System.out.println("\n===== ENTRADA DE TITULOS =====");
System.out.println("1 - CADASTRAR TITULO");
System.out.println("2 - LISTAR TITULO");
System.out.println("0 - SAIR");
int selecao = sc.nextInt();
switch (selecao) {
case 1:
System.out.println("Insira o Titulo: ");
this.setNome(sc.next());
titulo.add(this.getNome());
for (int i = 0; i < titulo.size(); i++) {
System.out.println(i +  " - " + "Titulo: " + titulo.get(i).toString());
}
break;
case 2:
Collections.sort(titulo);
titulo.sort(Comparator.comparing(titulo -> getNome()));
System.out.println("Titulos Ordenados Alfabéticamente: ");
System.out.println(titulo.toString());
break;
case 0:
System.out.println("Saindo do programa...");
exit(0);
}
} while (opcao == 1);
}

//Getters e Setters
public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

//Sobrecarga Método Comparable
@Override
public int compareTo(Titulo outroTitulo) {
return this.outroNome.compareTo(outroTitulo.outroNome);
}
}
public class Principal {
public static void main(String[] args) {
Titulo titulo = new Titulo("");
titulo.entrarDados();
}
}
2 respostas

Desafio 4:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

import static java.lang.System.exit;

public class Nome {
private String nomePessoa;

List<String> nome = new ArrayList<>();
List<String> outroNome = new LinkedList<>();
Scanner sc = new Scanner(System.in);

//Construtor
public Nome(String nomePessoa) {
this.nomePessoa = nomePessoa;
}

//Sobrecarga método toString
@Override
public String toString() {
return "Nome: " + this.getNomePessoa().toString();
}

//Método entrada de dados
public void entrarDados() {
System.out.println("===== ENTRADA DADOS =====");
int opcao = 1;
do {
System.out.println("\n1 - INSERIR NOME PESSOA");
System.out.println("2 - LISTAR NOME PESSOA");
System.out.println("0 - SAIR");
int selecao = sc.nextInt();
switch (selecao) {
case 1:
System.out.println("Insira o nome: ");
this.setNome(sc.next());
nome.add(this.getNomePessoa());
System.out.println("Nome: " + this.getNomePessoa().toString() + " cadastrado!");
System.out.println("Insira outro nome:");
this.setNome(sc.next());
outroNome.add(this.getNomePessoa());
System.out.println("Outro nome: " + this.getNomePessoa().toString() + " cadastrado!");
break;
case 2:
System.out.println("\n===== List -> ArrayList =====");
for (int i = 0; i < nome.size(); i++) {
System.out.println(i + " - " + "Nome: " + nome.get(i).toString());
}

System.out.println("\n===== List -> LinkedList =====");
for (int z = 0; z < outroNome.size(); z++) {
System.out.println(z + " - " + "Outro Nome: " + outroNome.get(z).toString());
}
break;
case 0:
System.out.println("Saindo do programa...");
 exit(0);
}
} while (opcao == 1);
}

//Getters e Setters
public String getNomePessoa() {
return nomePessoa;
}

public void setNome(String nomePessoa) {
this.nomePessoa = nomePessoa;
}
}

public class Principal {
public static void main(String[] args) {
Nome nome = new Nome("");
nome.entrarDados();
}
}

Desafio 5:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

import static java.lang.System.exit;

public class Nome {
List<String> novoNome;

Scanner sc = new Scanner(System.in);

@Override
public String toString() {
return "Nome: " + novoNome.toString();
}

public void entrarDados() {
System.out.println("===== ENTRADA DE DADOS =====");
int opcao = 1;
do {
System.out.println("\n1 - DADOS ARRAYLIST");
System.out.println("2 - DADOS LINKEDLIST");
System.out.println("0 - SAIR");
int selecao = sc.nextInt();
switch (selecao) {
case 1:
System.out.println("Inserir nome ArrayList");
novoNome = new ArrayList<>();
for (int i = 0; i < 3; i++) {
System.out.println("Insira o nome: ");
novoNome.add(sc.next());
}
System.out.println("Imprimir ArrayList");
for (int i = 0; i < novoNome.size(); i++){
System.out.println(i + " - Nome: " + novoNome.get(i));
}
break;
case 2:
System.out.println("Inserir nome LinkedList");
novoNome = new LinkedList<>();
for (int i = 0; i < 3; i++) {
System.out.println("Insira o nome: ");
novoNome.add(sc.next());
}
System.out.println("Imprimir LinkedList");
for (int i = 0; i < novoNome.size(); i++){
System.out.println(i + " - Nome: " + novoNome.get(i));
}
break;
case 0:
System.out.println("Saindo do programa...");
exit(0);
}

} while (opcao == 1);
}
}

Olá, Henrique. Como vai?

Parabéns pelo excelente progresso nos desafios! Você demonstrou um domínio muito bom sobre a manipulação de listas e, principalmente, sobre as diferentes formas de ordenar dados em Java.

Gostaria de destacar alguns pontos técnicos importantes que você aplicou e dar umas dicas para refinar ainda mais o seu código:

  • Ordenação com Collections: No Desafio 1, você utilizou o Collections.sort() de forma correta para ordenar uma lista de inteiros. É a forma mais prática para tipos primitivos e classes Wrapper.
  • Interface Comparable: Nos Desafios 2 e 3, você implementou a interface Comparable. Isso é fundamental quando queremos definir uma "ordem natural" para os nossos objetos.
  • ArrayList vs LinkedList: No Desafio 5, você explorou a diferença entre essas duas implementações da interface List. Vale lembrar que a ArrayList é geralmente mais rápida para acessar elementos pelo índice, enquanto a LinkedList se destaca em inserções e remoções frequentes.

No entanto, notei um detalhe importante no seu Desafio 3 que pode causar um erro de execução (NullPointerException). No método compareTo:

@Override
public int compareTo(Titulo outroTitulo) {
    return this.outroNome.compareTo(outroTitulo.outroNome);
}

A variável outroNome não parece estar sendo inicializada no seu código, e no Desafio 3 você tenta ordenar a lista usando titulo -> getNome(). O ideal seria que o compareTo utilizasse o atributo nome, que é o que você está preenchendo.

Uma sugestão de correção para o seu compareTo seria:

@Override
public int compareTo(Titulo outroTitulo) {
    return this.nome.compareTo(outroTitulo.getNome());
}

Além disso, uma dica de boas práticas: tente evitar colocar a lógica de leitura de dados (Scanner) e o menu principal dentro da própria classe de modelo (como Titulo ou Numero). O ideal é que a classe de modelo represente apenas o objeto, e a lógica de interação fique na classe Principal.

Continue praticando, pois essa base de coleções e ordenação é utilizada em quase todos os projetos Java no mercado!

Espero que possa ter lhe ajudado!