1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Ajuda] java

Discussão em 'Programação' iniciada por Barril, 18 de Maio de 2008. (Respostas: 3; Visualizações: 1104)

  1. Barril

    Barril Power Member

    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!
     
  2. 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).
     
  3. Baderous

    Baderous Banido

    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?

    Código:
    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.
     
    Última edição pelo moderador: 19 de Maio de 2008
  4. Barril

    Barril Power Member

    Boas, já consegui resolver.

    Código:
    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 ***** maneira. Terei problemas se não houver palavras começadas por uma das letras, mas desenrasca
     
    Última edição: 19 de Maio de 2008

Partilhar esta Página