1
This is the first topic I’m posting, I’d like you to help me with this problem.
The problem is based on ordering data entered in a Dynamic List (C#) according to name (Alphabetical order). As it is a facul exercise the teacher asks us to implement the TAD List as well as all its methods. The following is some of the ordering method I did:
public void ordenaAlfabetica()
{
Celula temp1 = Inicio.prox;
Celula temp2 = temp1.prox; //temp1 assumi o valor próximo à temp
string nome1; //'nome1' assumi o valor do dado nome da primeira temp em MAIÚSCULO
string nome2; //'nome2' assumi o valor do dado nome da segunda temp em MAIÚSCULO
Dados aux = new Dados();
int a = 0;
int b = 0;
int i = 0;
//inicio da repetição
while (temp1 != null && temp2 != null)
{
nome1 = temp1.dados.nome.ToUpper(); //'nome1' assumi o valor do dado nome da primeira temp em MAIÚSCULO
nome2 = temp2.dados.nome.ToUpper(); //'nome2' assumi o valor do dado nome da segunda temp em MAIÚSCULO
a = nome1[0]; //'a' assumi o valor em ASCII do primeiro caractere de 'nome1'
b = nome2[0]; //'b' assumi o valor em ASCII do primeiro caractere de 'nome2'
while(temp2 != null)
{
nome2 = temp2.dados.nome.ToUpper(); //nome2 assumi o valor do nome da temp
a = nome1[0]; //'a' assumi o valor em ASCII do primeiro caractere de 'nome1'
b = nome2[0]; //'b' assumi o valor em ASCII do primeiro caractere de 'nome2'
while (a == b) //roda enquanto as letras das palavras forem iguais ou 'i' atigir o tamanho da palavra
{
if (i == nome1.Length - 1 && i == nome2.Length - 1)
{
i = 0;
break;
}
else if (i < nome1.Length || i < nome2.Length)
{
i++;
a = nome1[i]; //'a' assumi o valor em ASCII do proximo caractere de 'nome1'
b = nome2[i]; //'b' assumi o valor em ASCII do proximo caractere de 'nome2'
}
}
if (a > b)
{
aux = temp1.dados;
temp1.dados = temp2.dados;
temp2.dados = aux;
}
temp2 = temp2.prox;
}
temp1 = temp1.prox;
temp2 = temp1.prox;
}
}
The data entered inside each cell is of a class Data that contains encapsulated the Name and a Code.
The idea I was trying to make is in case the first letters of the word repeat, the third
WHILE
make it go to the next letter.
The example I am testing is the following, where they are entered in this order:
"deise"; 4;
"beatriz"; 2;
"carlos"; 3;
"abcade"; 1;
And the output that should be in alphabetical order is as follows:
"abcade"; 1;
"carlos"; 3;
"beatriz"; 2;
"deise"; 4;
Would anyone have any idea where the error lies??