Assigning Value to an Array Out of Method

0

I need to assign a value to an Array and throw it out of a method, but for this I need to get the values that are obtained through this method, to later use this Array obtained in other methods or classes. The print inside the method appears correctly. Now when I step into the Array it does not correctly assign the values. I do not know if the way the code was done is correct for this?

Follow the code so far ...

import java.util.Arrays;

public class CombBusca {

    private int numeros[] = {1,2,3,4,5};
    private int quantidade = 3;
    private int resultado[] = new int[3];
    private int count = 0;
    public String[] novosresultados;

    private void busca(int inicio,int fim, int profundidade){

        String todosresultados = "";

        if ( (profundidade + 1) >= quantidade)
        for(int x = inicio; x <= fim; x++){
            resultado[profundidade] = numeros[x];
            // faz alguma coisa com um dos resultados possiveis
            count++;
            //Criei aqui a String para posteriormente passar para o Array 
            todosresultados = resultado[0] + ", " + resultado[1] + ", " + resultado[2];
            System.out.println(resultado[0] + ", " + resultado[1] + ", " + resultado[2]);
        } else
            for(int x = inicio; x <= fim; x++){
                resultado[profundidade] = numeros[x];
                busca(x + 1,fim + 1,profundidade + 1);
        }
        // Novo Array para jogar fora do método "busca" e usar em outros metodos ou classes
        novosresultados = todosresultados.split(", ");
        // Aqui quando mando o print é que acontece o erro
        System.out.println(Arrays.asList(novosresultados));

    }

    public static void main(String args[]){

        CombBusca comb = new CombBusca();
        comb.busca(0, (5-3), 0);

        System.out.println("Total de combinacoes: " + comb.count);

       }
   }

Output:

  

[1, 2, 5]
  [1, 3, 5]
  [1, 4, 5]
  []
  [2, 3, 5]
  [2, 4, 5]
  []
  [3, 4, 5]
  []
  []
  Total combinations: 10

Expected Mode:

  

1, 2, 3 |   1, 2, 4
  1, 2, 5
  1, 3, 4
  1, 3, 5
  1, 4, 5
  2, 3, 4
  2, 3, 5
  2, 4, 5
  3, 4, 5
  Total combinations: 10

    
asked by anonymous 26.12.2016 / 23:32

2 answers

0

There's nothing wrong with your code. The output is also correct.

What happens is that the variable todosresultados is local and when exiting the last recursion it is empty, causing the program to print '[]' on the console.

To avoid this, try a content test before printing it:

if (todosresultados.length() > 0)
            // Novo Array para jogar fora do método "busca" e usar em outros metodos ou classes
            novosresultados = todosresultados.split(", ");

Or choose to overwrite this impression of the code, since it does not make sense because its result always equals the previous line.

Remove the following code:

if (todosresultados.length() > 0) {
        // Novo Array para jogar fora do método "busca" e usar em outros metodos ou classes
        novosresultados = todosresultados.split(", ");
        // Aqui quando mando o print é que acontece o erro
        System.out.println(Arrays.asList(novosresultados));
        }

UPDATE

After your comment I was able to really understand what you wanted.

The main issue is that you are not adding the variable novosresultados , but rather overwriting your data by the last execution of the busca() method.

For solution, first replace the declaration of the novosresultados variable with:

private static List<String> novosresultados = new ArrayList<String>();

The type List is better for those who are starting, as well as making it easier to implement for this case if compared to a vector.

Then replace the line:

System.out.println(resultado[0] + ", " + resultado[1] + ", " + resultado[2]);

by

novosresultados.add(todosresultados);

The add method of the List object does not overwrite the previous data, but added more data in the list.

Finally, remove my previous suggestion from the code, since it will no longer be necessary:

if (todosresultados.length() > 0) {
    // Novo Array para jogar fora do método "busca" e usar em outros metodos ou classes
    novosresultados = todosresultados.split(", ");
    // Aqui quando mando o print é que acontece o erro
    System.out.println(Arrays.asList(novosresultados));
}

Your code will look like this:

public class ComBusca {

    private int numeros[] = {1,2,3,4,5};
    private int quantidade = 3;
    private int resultado[] = new int[3];
    private int count = 0;
    private static List<String> novosresultados = new ArrayList<String>();

    private void busca(int inicio,int fim, int profundidade){

        String todosresultados = "";

        if ( (profundidade + 1) >= quantidade)
            for(int x = inicio; x <= fim; x++){
                resultado[profundidade] = numeros[x];

            // faz alguma coisa com um dos resultados possiveis
            count++;
            //Criei aqui a String para posteriormente passar para o Array 
            todosresultados = resultado[0] + ", " + resultado[1] + ", " + resultado[2];
            novosresultados.add(todosresultados);
        } else
            for(int x = inicio; x <= fim; x++){
                resultado[profundidade] = numeros[x];
                busca(x + 1,fim + 1,profundidade + 1);
            }
    }

    public static void main(String args[]){

        ComBusca comb = new ComBusca();
        comb.busca(0, (5-3), 0);

        //Aqui imprimo o resultado da lista, fora do método busca
        for (String r : novosresultados)
            System.out.println(r);

        System.out.println("Total de combinacoes: " + comb.count);

   }
}
    
27.12.2016 / 00:50
0

From what I understand, you're trying to print all the permutations of an array.

If that's the case, you have Heap's Algorithms that does this.

It has a Robert Sandwick material that talks about the algorithm.

  

link

Some examples of implementation:

  

link    link

Java code

public class HeapsAlgorithms {  
    public void generate( int n, int[] a ){
        if( n ==  1 )
            System.out.println( Arrays.toString(a));
        else{
            for( int i = 0; i < n - 1; i ++ ){
                generate( n - 1, a );
                if( n % 2 == 0 ){
                    swap( a, i, n-1 );
                }else {
                    swap( a, 0, n-1 );
                }
            }
            generate( n - 1, a );
        }
    }

    private void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

    public static void main(String[] args) {
        HeapsAlgorithms hp = new HeapsAlgorithms();

        hp.generate( 4 , new int[]{1,2,3,4} );
    }
}
  

source : link

    
27.12.2016 / 12:54