Tendo o método de adicionar de forma circular elementos ao fim da lista, tenho que lançar uma exceção para caso tente adicionar elementos repetidos, já tentei com for, while, mas n consigo
public void add(String s) throws Exception {
//adicionar no final (funcionando)
TNo auxiliar = inicio;
Olá! permita-me tentar entender com uma pergunta.
Por qual motivo você não testa a lista com um filter.stream e retorna um boleano se encontrar uma repetição na lista?
public void add(String s) throws Exception {
// adicionar no final (funcionando)
TNo auxiliar = inicio;
TNo novo = new TNo(s);
if (inicio == null) {
inicio = novo;
} else {
while (auxiliar.proximo != inicio) {
auxiliar = auxiliar.proximo;
}
auxiliar.proximo = novo;
}
novo.proximo = inicio;
}
}
Essa é a classe com o método abstrato
public interface TListaMiniProjeto {
/**
* esse método insere a entrada na lista. No caso de listas ordenadas, a inserção
* acontece na posição adequada. No caso de listas desordenadas, a inserção acontece
* no final da lista.
* @param s valor a ser guardado na lista
* @throws Exception não deve ser possível inserir valores repetidos dentro da lista
*/
public void add(String s) throws Exception;
public void add(String s) throws Exception {
// adicionar no final (funcionando)
TNo auxiliar = inicio;
TNo novo = new TNo(s);
if (inicio == null) {
inicio = novo;
} else {
while (auxiliar.proximo != inicio) {
auxiliar = auxiliar.proximo;
}
auxiliar.proximo = novo;
}
novo.proximo = inicio;
}
}
Essa é a classe com o método abstrato
public interface TListaMiniProjeto {
/**
* esse método insere a entrada na lista. No caso de listas ordenadas, a inserção
* acontece na posição adequada. No caso de listas desordenadas, a inserção acontece
* no final da lista.
* @param s valor a ser guardado na lista
* @throws Exception não deve ser possível inserir valores repetidos dentro da lista
*/
public void add(String s) throws Exception;
Para os casos que estás a fazer, que é sempre inserir no final da lista, só tens de ir verificando, enquanto percorres a lista para chegar ao último elemento, se algum já tem o valor igual ao que queres adicionar.
while (auxiliar.proximo != inicio) {
if (auxiliar.dado.equals(s)) {
throw new Exception ("Elemento já existe na lista");
}
auxiliar = auxiliar.proximo;
}
Amigos, fiquei curioso por nunca passar por uma necessidade deste tipo. Em que caso haveria um impeditivo de usar algo simples e já existente? Seria para fins didaticos?
Vc fez algum curso superior da área? Normalmente os cursos, até os mais sem vergonhas, tem disciplinas de estruturas de dados. Essas coisas são vistas nessa disciplina ou em disciplinas correlatas. Eu dou aula disso há váááários anos… Se tiver interesse: https://www.youtube.com/playlist?list=PLqEuQ0dDknqUx2T9-gcu3eeDQeYt1Lqbt
Em geral, é “melhor” usar o que já tem pronto (a menos que sua necessidade seja tão específica que precise de algo feito à parte).
Mas estudar estrutura de dados é importante para você entender o que são, onde vivem, o que comem para que servem e como usá-las (em quais casos é mais adequado usar e principalmente quando é melhor não usar). E geralmente nessas disciplinas você acaba implementando alguma(s) dela(s) para entender melhor como elas funcionam (como parece ser o caso, “o professor pediu”). Saber como as coisas funcionam ajuda a entendê-las melhor.
Então mesmo que na prática você vá usar algo pronto, é importante saber o que é esse algo, e se ele se encaixa no problema que você quer resolver.
Eu considero isso importantíssimo, mas que vejo muita gente negligenciando (e aí você vê gente usando array quando um map/hash/dicionário seria melhor ou vice-versa, enfim, usando uma estrutura quando outra seria melhor, etc). E escolher a estrutura de dados adequada é meio caminho para um código melhor.
Que coisa, respondi na maior boa vontade, explicando meu ponto de vista e tal, porque achei que somente “sim” seria uma resposta meio inútil, e no fim você diz que eu atrapalhei…
Eu acho o contrário, respostas com uma ou duas frases mas que não explicam nada é que atrapalham, pois só geram ruído e não acrescentam nada à discussão.
Se fosse “mais do mesmo”, então seria algo tão óbvio que você nem precisaria ter perguntado. Mas como perguntou, achei que valia a pena responder.