Create new array with contents from another array

1

Parent Matrix:

public static String [][] matrizPrincipal(){
     String [] [] matriz = new String [2] [6];
     matriz[0][0] = "Robin Arryn";
     matriz[0][1] = "Lino Facioli";
     matriz[0][2] = "145";
     matriz[0][3] = "Vivo";
     matriz[0][4] = "Arryn";
     matriz[0][5] = "Feminino";

     matriz[1][0] = "Yohn Royce";
     matriz[1][1] = "Rupert Vansittart";
     matriz[1][2] = "45";
     matriz[1][3] = "Vivo";
     matriz[1][4] = "Arryn";
     matriz[1][5] = "Feminino";
     return matriz;
}

Method that if the character (column 0 of the main matrix) is a woman (column 5 ) and belongs to the Arryn 4 ) adds the character name to a new array:

public static void imprimeMatrizFeminina(String [] [] mat){
     int cont = 0;
     //Método para Mulheres da família Arryn
     for(int i=0; i<mat.length; i++){
        if(mat[i][5].equals("Feminino") && mat[i][4].equals("Arryn")) cont ++;
     }
     String[] matrizFemininaArryn = new String [cont];

     for(int i=0; i<mat.length; i++){
        for(int j=0; j<matrizFemininaArryn.length; j++){
           if(mat[i][5].equals("Feminino") && mat[i][4].equals("Arryn")){
               matrizFemininaArryn[j] = mat[i][0];
           }
        }    
     }
     System.out.println("Mulheres da família Arryn em ordem alfabética crescente:" + Arrays.toString(matrizFemininaArryn));
}

But when testing, it returns only the first character ( Robin Arryn ) and the second position returns null instead of the name Yohn Royce .

Image:

    
asked by anonymous 21.05.2015 / 22:14

1 answer

1

This problem happens because in the imprimeMatrizFeminina method you iterate n times over the array matrizFemininaArryn , which is unnecessary, remove the third for and use the variable j as index:

public static void imprimeMatrizFeminina(String [] [] mat){
    int cont = 0, j = 0;
    for(int i = 0; i < mat.length; i++)
       if(mat[i][5].equals("Feminino") && mat[i][4].equals("Arryn")) cont ++;

    String[] matrizFemininaArryn = new String [ cont ];

    for(int i = 0; i < mat.length; i++){
        if(mat[i][5].equals("Feminino") && mat[i][4].equals("Arryn")){
            matrizFemininaArryn[j] = mat[i][0];
            j ++;
        }
    }
    System.out.println("Mulheres da família Arryn em ordem alfabética crescente:" + Arrays.toString(matrizFemininaArryn));
}

See demonstração

Alternatively, you can use a list :

public static void imprimeMatrizFeminina(String [] [] mat){
    List<String> matrizFemininaArryn = new ArrayList<String>();

    for(int i = 0; i < mat.length; i++){
        if(mat[i][5].equals("Feminino") && mat[i][4].equals("Arryn")){
            matrizFemininaArryn.add(mat[i][0]);
        }
    }
    System.out.println("Mulheres da família Arryn em ordem alfabética crescente: " + matrizFemininaArryn);
}

View demonstração

    
22.05.2015 / 02:23