Doubt regarding the function is

Asked

Viewed 80 times

1

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];
            }    
}

In the example above, the matrizFemininaArryn will receive the matriz[i][0] until you fill your full size correct? However my goal was that when executing the for for the first position of the vector matrizFemininaArryn, executed the for of i again, not to apply the same result in the next position of the matrizFemininaArryn.

How to proceed?

1 answer

1

There are two commands that can be used to modify the normal execution path of loops: break and continue

The break causes the loop is completed immediately, continuing execution from the instruction after the key that closes the code of the loop.
The code between the break and the key is ignored.

This example code looks for the number 12 no array. The break ends the loop when the value is found.

class BreakDemo {
    public static void main(String[] args) {

        int[] arrayOfInts = 
            { 32, 87, 3, 589,
              12, 1076, 2000,
              8, 622, 127 };
        int searchfor = 12;

        int i;
        boolean foundIt = false;

        for (i = 0; i < arrayOfInts.length; i++) {
            if (arrayOfInts[i] == searchfor) {
                foundIt = true;
                break;
            }
        }

        if (foundIt) {
            System.out.println("Found " + searchfor + " at index " + i);
        } else {
            System.out.println(searchfor + " not in the array");
        }
    }
}

The continue causes the execution to jump to the line where the key that closes the code of the loop, by having his condition assessed, loop will perform again if she is true.
The code between the continue and the key is ignored.

The code of the following example goes through string counting all occurrences of the letter p. If the parsed letter is not a p continue causes the next code to be ignored and is passed to the next letter.

class ContinueDemo {
    public static void main(String[] args) {

        String searchMe = "peter piper picked a " + "peck of pickled peppers";
        int max = searchMe.length();
        int numPs = 0;

        for (int i = 0; i < max; i++) {

            if (searchMe.charAt(i) != 'p')
                continue; // se não é 'p' buscar próxima letra

            // Mais um 'p' encontrado
            numPs++;
        }
        System.out.println("Found " + numPs + " p's in the string.");
    }
} 

If I understand your question correctly, break. Your code would look like this:

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];
            break;
        }
     }
}//após a execução do break a execução salta para aqui terminado o ciclo 'j'
 //continuando o ciclo 'i'

Both the break like the continue act in relation to the loop where they are inserted.
If you want them to refer to loops outside, they are associated with a label indicating to which loop refer.

Suppose you wanted your code to end both loops when the condition of if were true.
The code would be like this:

//Identifica-se o loop com um 'label'
search:
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];
            break search; //Adicionado o 'label' seach
        }
     }
}
//após a execução do break a execução salta para aqui terminado o ciclo 'j'e o ciclo 'i'

Source of the sample code: Java documentation

Browser other questions tagged

You are not signed in. Login or sign up in order to post.