View Full Version : [Ajuda] java


Barril
18-05-2008, 14:38
Boas.

Precisava de ajuda aqui com um algoritmo de JAVA.

Supondo que temos um vector com uma data de palavras ordenadas alfabeticamente. O que eu preciso é de criar um novo vector de inteiros que contenha, na primeira posição zero, na segunda o indice da ultima palavra começada por a, na terceira o indice da ultima palavra começada por b e assim sucessivamente.

Espero que me possam dar uma ajudita.

Cumpz!

Mr. Brightside
18-05-2008, 14:45
De repente a única coisa que me lembro é percorrer todo o array e ir actualizando o novo array com o valor do índice correspondente. Podes optimizar isto percorrendo o array por ordem inversa (neste caso só deves actuakizar uma vez) e parando assim que encontras uma palavra começada com um 'A' (tudo o que vem a seguir e irrelevante).

Baderous
18-05-2008, 15:28
Para o caso de, por exemplo, no teu vector de palavras, existir uma palavra acabada em 'a' e uma acabada em 'c', mas não existir uma acabada em 'b', como é que é suposto aparecer o índice dessa? Fica, por exemplo, -1?

public class Teste {
public static final int MAX = 10;
public static final int MAX_LETRAS = 26;
public static void main(String[] args) {
String[] array = new String[MAX];
array[0] = "Abacatu";
array[1] = "Baderoul";
array[2] = "Cacahuetep";
array[3] = "Dooma";
array[4] = "Elrond";
array[5] = "Faik";
array[6] = "Gc";
array[7] = "Heute";
array[8] = "IMo";
array[9] = "Jameh";
int[] vector = new int[MAX];
vector[0] = 0;
char[] letras = new char[MAX_LETRAS];
char letra; int i,j,k,indice;
for (i=0,letra='a';i<MAX_LETRAS;i++,letra++)
letras[i] = letra;
for (i=1,k=0;i<MAX && k<MAX_LETRAS;i++,k++) {
indice = -1;
for (j=0;j<MAX;j++)
if (array[j].charAt(array[j].length()-1)==letras[k])
indice=j;
vector[i]=indice;
}
for (i=0;i<MAX;i++)
System.out.println(vector[i]);
}
}Testei este algoritmo com as strings que vês aí e funcionou. Vê se dá para o que queres.
Basicamente, construí um array com todas as letras do alfabeto. Depois coloquei a 1ª posição do array de índices a 0. Depois, para cada letra do alfabeto, percorri o array de palavras e verificava se alguma das palavras terminava nessa letra. Se sim, então ia guardando o índice até chegar ao fim do array. No fim de percorrer o array para essa letra, guardava no array de índices, o índice calculado. Antes coloquei o valor do índice a -1 para os casos em que não existam palavras terminadas pela letra pela qual se está a procurar.

Barril
19-05-2008, 21:53
Boas, já consegui resolver.

public static void criaIndices(String oDic[], int idx[]){

String letra[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t",
"u","v","w","x","y","z"};

idx[0]=0;
idx[26]=oDic.length;
int k=1;
int j=0;

for(int i=0;i<oDic.length-1;i++){

if(oDic[i].toLowerCase().startsWith(letra[j]) &&
!oDic[i+1].toLowerCase().startsWith(letra[j])){

idx[k]=i;
k++;
j++;
}
}

Obrigado pela ajuda de kk maneira. Terei problemas se não houver palavras começadas por uma das letras, mas desenrasca