Metodo: retornar os valores invertidos do vetor

19 respostas
dfarias

Criar uma função chamada inverte que receba um vetor de números
inteiros como parâmentro e seu tamanho. A função deve inverter a ordem dos
elementos do vetor de modo que o 1º vire o último e o 2º vire o penúltimo e
assim sucessivamente.

package algo487;
import java.util.Scanner;

/**
 * @author daniel
 */
public class Main {

    public static void main(String[] args) {
        // TODO code application logic here

     Scanner x = new Scanner (System.in);


        System.out.println("informe quantidade de valores ");
        int qt=x.nextInt();


        int a[]=new int [qt];
        int b[]=new int [qt];


       // o vetor b é o inverso de a. Essa declaração é feita no metodo mais abaixo 'inverte'

        for (int i=0; i<qt; i++) {
            System.out.println("Informe valor "+(i+1));
            a[i]=x.nextInt();
                                 }

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

       System.out.println(inverte(b[i]));//erro nessa parte 

                            }

                                            }


    public static void inverte(int a[], int b[], int qt) {
// aqui os valores são invertidos
       int j=qt-1;
       for (int i=0; i><qt; i++) {
       b[j]=a[i];
       j=j-1;

                                 }


       for (int i=0; i><qt; i++) {// nao é para ser >< e sim <
          System.out.println (b[i]);
                                }
                                                                }

}
>>

19 Respostas

JM4X

o código não faz o que o enunciado pede.

Você não criou uma função nomeada como “inverte” que recebe como parâmetro um vetor de inteiros e seu tamanho.

Você não implementou a função.

mauricionarcizo

bah cara, tu ta dando tiro no escuro né, tem coisas ai muito faceis de ver o erro e voce esta errando…
por exemplo quando voce cria um método que recebe parametros, se voce tem 2 valores que irão receber como parametros, obrigatoriamente voce tem que passar 2 valores ao chamar esse método, assim como no teu metodo inverte que tem 3 parametros a serem recebidos, mas no momento que voce chama esse método voce apenas passa um valor… tem que estudar mais cara…

dfarias

mauricionarcizo:
bah cara, tu ta dando tiro no escuro né, tem coisas ai muito faceis de ver o erro e voce esta errando…
por exemplo quando voce cria um método que recebe parametros, se voce tem 2 valores que irão receber como parametros, obrigatoriamente voce tem que passar 2 valores ao chamar esse método, assim como no teu metodo inverte que tem 3 parametros a serem recebidos, mas no momento que voce chama esse método voce apenas passa um valor… tem que estudar mais cara…

kkkk , pra que eu vou passar A pra main se eu só preciso exibir B (que é o inverso de a).

mauricionarcizo
for (int i=0; i<qt; i++) {  
  
       System.out.println(inverte(b[i]));//aqui voce esta chamando o metodo inverte e passando um parametro, mas no seu metodo requer 3 parametros, dois vetores e um inteiro!!!!!!!
  
                            }  
  
                                            }  
  
  
    public static void inverte(int a[], int b[], int qt) {  
// aqui os valores são invertidos  
       int j=qt-1;  
       for (int i=0; i><qt; i++) {  
       b[j]=a[i];  
       j=j-1;  
  
                                 }
JM4X

o enunciado pede DOIS parametros: VETOR DE INTEIROS e TAMANHO DO VETOR.

seria desnecessário o tamanho do vetor, mas o enunciado pede.

começa assim:

public static int[] inverter(int[] v, int t) {
    // aqui você poe seu algoritmo de inverter o vetor utilizando [b]v[/b] e [b]t[/b].
}

tenta fazer assim, e posta teu código, se precisar de ajuda.

dfarias

eu vou precisa colocar um return dentro do for do metodo inverte?

JM4X

escreve o código cara, não tenha medo!

a força está com você!

tente só assim se aprende.

depois que tentar, posta seu código que agente vai te ajudando.

mas é importante que você tente!

dfarias
/*
algo487-Criar uma função chamada inverte que receba um vetor de números
inteiros como parâmentro e seu tamanho. A função deve inverter a ordem dos
elementos do vetor de modo que o 1º vire o último e o 2º vire o penúltimo e
assim sucessivamente.
 */

package algo487;
import java.util.Scanner;

/**
 * @author daniel
 */
public class Main {

    public static void main(String[] args) {
        // TODO code application logic here

     Scanner x = new Scanner (System.in);


        System.out.println("informe quantidade de valores ");
        int qt=x.nextInt();


        int a[]=new int [qt];
        int b[]=new int [qt];
        
        int c[]=new int [qt];


       

        for (int i=0; i<qt; i++) {
            System.out.println("Informe valor "+(i+1));
            a[i]=x.nextInt();
                                 }

   for (int i=0; i><qt; i++) {

       
       c[i]=inverte(b[i]);
       
       System.out.println(c[i]);

                            }

                                            }


    public static int inverte(int a[], int b[], int qt) {

       int j=qt-1;
       for (int i=0; i><qt; i++) {
       b[j]=a[i];
       j=j-1;
//lembrado que nao é >< mas sim <
       return (b[i]);
                                 }


      
                                                                }

}
>
mauricionarcizo

deu certo??? agora esta ao inves de dar tiro no escuro está dando tiro no pé… cara lê seu código tente ver o que está acontecendo

mauricionarcizo
import java.util.Scanner;

/**
 *
 * @author Mauricio
 */
public class Main {

    public static void main(String[] args) {
        // TODO code application logic here

        Scanner x = new Scanner(System.in);


        System.out.println("informe quantidade de valores ");
        int qt = x.nextInt();


        int a[] = new int[qt];
        int b[] = new int[qt];


        // o vetor b é o inverso de a. Essa declaração é feita no metodo mais abaixo 'inverte'

        for (int i = 0; i < qt; i++) {
            System.out.println("Informe valor " + (i + 1));
            a[i] = x.nextInt();
        }
        inverte(a, b, qt);
    }

    public static void inverte(int a[], int b[], int qt) {
// aqui os valores são invertidos
        int j = qt - 1;

        for (int i = 0; i < qt; i++) {
            b[i] = a[j];
            j-=1;
        }

        for (int i = 0; i < qt; i++) {
            System.out.println("A[]" + a[i]);
        }

        for (int i = 0; i < qt; i++) {
            System.out.println("B[]" + b[i]);
        }
    }
}

sei que não deveria, mas está ai, para ver o que eu estava te falando sobre passagem de parametros, da uma olhada e tenta entender o que foi feito...

mauricionarcizo

tenta ver a diferença da forma como voce está chamando o seu metodo inverte, para o jeito que eu coloquei agora…

isaiaspf

Farias,

Você pode fazer da seguinte forma:
public static int[] invertArray(int[] array) {
	int[] invertedArray = new int[array.length];
	for(int i = array.length; i > 0; i--) {
		invertedArray[array.length - i] = array[i - 1];
	}
	return invertedArray;
}
E para rodar:
int[] a = new int[] {1,3,5,7,8,10};
int[] b = invertArray(a);

for(int i : b) {
	System.out.println(i);
}
Abraço.
dfarias

Isaias,

Você poderia me dizer para que serve o ‘:’ no java?

mauricionarcizo

vou responder por ele, é uma forma mais limpa e bonita de se implementar o for, que faz exatamente a mesma coisa, porem mais elegante por assim dizer, voce declara um tipo do mesmo tipo que quer percorrer coloca essas “:” e o tal bixo que voce quer percorrer. Então é a mesma coisa que o for que voce implementou, tem a mesma função. E dizendo que o i irá percorrer o b.

dfarias

entendi cara, seu passo uma certa quantidade, eu tenho que retornar a mesma quantidade.

isaiaspf

No caso do “for(int i : b)” é pra definir um foreach.
Seria a mesma coisa que fazer: for(int i = 0; i < b.length; i++) { System.out.println(b[i]); }

dfarias

Agora eu entendi!

eu preciso retornar a, b,qt.Senão o codigo nao funfa.

Então funciona perfeitamente. Vlw mauricio.

package JavaApplication32;
import java.util.Scanner;

/**
*
* @author Mauricio
*/
public class Main {

    public static void main(String[] args) {
        // TODO code application logic here

        Scanner x = new Scanner(System.in);


        System.out.println("informe quantidade de valores ");
        int qt = x.nextInt();


        int a[] = new int[qt];
        int b[] = new int[qt];


        // o vetor b é o inverso de a. Essa declaração é feita no metodo mais abaixo 'inverte'

        for (int i = 0; i < qt; i++) {
            System.out.println("Informe valor " + (i + 1));
            a[i] = x.nextInt();
        }
        
        
        inverte(a, b, qt);

    }

    public static void inverte(int a[], int b[], int qt) {
// aqui os valores são invertidos
        int j = qt - 1;

        for (int i = 0; i < qt; i++) {
            b[i] = a[j];
            j-=1;
        }

       
        for (int i = 0; i < qt; i++) {
            System.out.println("B[]" + b[i]);
        }  
    }
}
dfarias

vlw pessoal … vcs são fodões!!!

JM4X

a principal diferença é que quando se usa o for aprimorado (esse for com “:”) o for se encarreca de encontrar a melhor forma de iterar sobre a estrutura.

quando vc usa o for convencional, ele simplesmente chama cada “indice” da estrutura, um a um… no caso de uma lista ligada, isso é custoso…

para arrays e implementações estáticas de listas, o for convencional e o for aprimorado agem exatamente iguais.

[]’ s

Criado 15 de julho de 2011
Ultima resposta 15 de jul. de 2011
Respostas 19
Participantes 4