Compactar Vetor

Objetivo do codigo
Um vetor v1 com N valores inteiros dara origem ao v2 da seguinte maneira. O vetor v1 deve receber apenas valores 0s e 1s.

a) o 1º elemento do v2 é o numero de algarismos 0s encontrados no v1 apartir do seu inicio até o 1º valor 1 encontrado.
b) o 2º elemento do v2 é o nuumero de algarismos 1s encontrados no v1 apos o ultimo 0, até o proximo 0
c) o 3º elementodo v2 é o numero de algarismos 0s encontrados no v1 apartir do ultimo 1 encontrado ate o proximo 1.
d) repetir os passos b e c até o fim do v1.
Ex: v1[0 0 0 1 1 0 1 0 1 1 0] obtem-se v2[3 2 1 1 1 2 1]

Inicio
package Questão_02;
import javax.swing.JOptionPane;
public class Exe02 {
public static void main(String[] args) {

    // Declaração dee variáveis, constantes e vetores;
    int auxV2 = 0;
    int qtdZero = 0, qtdZero2 = 0, qtdUm = 0;
    int posicao = 0;
    
    final int VETOR_LENGHT = Integer.parseInt(JOptionPane.showInputDialog(
            "Tamanho do vetor: "));
    int v1[] = new int[VETOR_LENGHT];
    int v2[] = new int[VETOR_LENGHT];
    
    // Entrada de DADOS (com numeros randomicos);
    for (int i = 0 ; i < VETOR_LENGHT ; i++) {
        v1[i] = (int) (Math.random() * 2) ;
    }

// ### Processamento de dados ###
// A) o primeiro elemento do vetor V2 é o numero de algarismos zero que o vetor v1 tem a partir
// do seu inicio até o primeiro algarismo 1;
for (int i = posicao ; i < VETOR_LENGHT ; i++) {
if (i < 1) {
if (v1[i] == 0)
qtdZero++;
}
else {
if (v1[i] == 0) {
qtdZero++;
}
if (v1[i] == 1) {
posicao = i; // Posição do primeiro UM apos o inicio do vetor;
break;
}
}
}
v2[auxV2] = qtdZero;
auxV2++;
// B) o proximo elemento do vetor v2 é o numero de algarismos 1 que o vetor v1 contem a partir do
// ultimo zero encontrado até o proximo algarismo zero;
for ( int i = 0 ; i < VETOR_LENGHT ; i++) { // Posição do ultimo zero encontrado;
if (v1[i] == 0) {
if (v1[i+1] == 1) {
posicao = i + 1; // (Posição do ultimo ZERO) + 1;
break;
}
}
}

    for (int i = posicao; i < VETOR_LENGHT ; i++) {
        if (v1[i] == 1) {
            qtdUm++;
            posicao = i; // Posição do ultimo UM;
        } else {
            
            break;
        }
    }
    
    v2[auxV2] = qtdUm;
    auxV2++;

// C) o proximo elemento do vetor v2 é o numero de algarismos zero que o vetor v1 contem
// a partir do ultimo 1 encontrado, até o proximo algarismo 1;
for (int i = posicao + 1; i < VETOR_LENGHT ; i++) {
if (v1[i] == 1) {
posicao = i;
break;
}
else
qtdZero2++;
}
if (auxV2 < 10) {
v2[auxV2] = qtdZero2;
auxV2++;
}

// Saída de dados;
for (int i = 0 ; i < VETOR_LENGHT; i++) {
System.out.print(v1[i]+"\t");
}

    System.out.println("\n");
    for (int i = 0; i < auxV2 ; i++) {
        System.out.print(v2[i]+"\t ");
    }
    System.out.println("posicao: "+posicao);
}

}
FIM

###MINHA DUVIDA OU PROBLEMA OU QUEBRA-CABEÇA ###
So não sei como repetir os passos B) e C) com comandos de repetição como o ‘while’. Já que os passos a) e b) estão ok. Por mais que o codigo esteja GIGANTE! :slight_smile:
Obrigado a quem deu atenção ao topico e possa abrir a minha cabeça para isso!!
Como faço para usar os passos b e c com comandos de repetição? oO

Abraço, mt PAZ

Fala léo blz? Eu dei uma melhorada no programa, você pode continuar usando o for, mas eu refiz utilizando o while. Dá uma olhada e vê se é isso aí, qualquer dúvida posta.

import javax.swing.JOptionPane; 
	
public class Exercicio {
	public static void main(String[] args) { 

	// Declaração dee variáveis, constantes e vetores;
	int qtdZero = 0, qtdUm = 0; 
	int posicaoV2 = 0; 
	int i=0;
	
	final int VETOR_LENGHT = Integer.parseInt(JOptionPane.showInputDialog( "Tamanho do vetor: ")); 
	int v1[] = new int[VETOR_LENGHT]; 
	int v2[] = new int[VETOR_LENGHT]; 

	// Entrada de DADOS (com numeros randomicos);
	for (i = 0 ; i < VETOR_LENGHT ; i++) { 
		 v1[i] = (int) (Math.random() * 2) ; 
	}			 	
	//zera o i
	i=0;
	// Condição de término
	while(i < VETOR_LENGHT) {
		 //Executa o passo A
		while (v1[i] < 1) { //Aqui você pode usar um while ao invés do for
				  qtdZero++;
				  i++; //incrementa i
				  
				  if(i>=VETOR_LENGHT )
					  break;
				}
		v2[posicaoV2]=qtdZero;
		//Incrementa a posicao do v2
		posicaoV2++;
		qtdZero=0;
			
		if (i>= VETOR_LENGHT) 
			break;
	
		//Passo B) 
		while(v1[i]==1 ) {
				qtdUm++;
				i++;
				
				if(i>=VETOR_LENGHT  )
					  break;
			}
			
		v2[posicaoV2]=qtdUm;
		//incrementa posicaoV2
		posicaoV2++;
		qtdUm=0;
			
		if(i>=VETOR_LENGHT)
			break;
	}//fim do while
	
	//Aqui imprime o v1
	System.out.println("######V1#######\n");
	//Aqui imprime o v1
	for (int j = 0; j < v1.length; j++) {
		System.out.println("V1[" + j + "]" + "=" + v1[j]);
	}
	
	//Aqui imprime o v2
	System.out.println("######V2#######\n");
	for (int j = 0; j < v2.length; j++) {
		System.out.println("V2[" + j + "]" + "=" + v2[j]);

	}
  }		
}

Att

Daniel,
ae irmão, beleza sim. So passando ae para dar uma resposta positiva quanto ao código melhorado. Ainda pus uma variável para que o vetor v2 não ficasse extenso demais preenchendo os indices vazios com ‘0’. A variável é ‘int VETOR_LENGHT_v2 = 0’.

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

// Declaração de variáveis, constantes e vetores;
int qtdZero = 0, qtdUm = 0;
int posicaoV2 = 0;
int i=0;
final int VETOR_LENGHT = Integer.parseInt(
JOptionPane.showInputDialog( "Tamanho do vetor: "));
int VETOR_LENGHT_v2 = 0; // Variável adicionada para que o vetor fique do tamanho necessario;
int v1[] = new int[VETOR_LENGHT];
int v2[] = new int[VETOR_LENGHT];

// Entrada de DADOS (com numeros randomicos);
for (i = 0 ; i < VETOR_LENGHT ; i++) {
v1[i] = Integer.parseInt(JOptionPane.showInputDialog(“Valor:”)) ;
}
i=0;

    while(i < VETOR_LENGHT) {  
    // Passo 'A' - Encontrar 0's apartir do inicio do v1 até o primeiro algarismo 1
    // e encontrar a quantidade de 0's a apartir do ultimo algarismo 1;
        while (v1[i] < 1) { 
               qtdZero++;
               i++;
               
               if (i>=VETOR_LENGHT)
                   break;
        }  
     v2[posicaoV2] = qtdZero;
     VETOR_LENGHT_v2++; // Incrementa tamanho do v2;
     posicaoV2++;  //Incrementa posição v2;
     qtdZero=0;  
           
     if (i>= VETOR_LENGHT)   
         break;  

// Passo B: Número de algarismos 1’s a partir do último 0 encontrado até o próximo 0;
while(v1[i]==1 ) {
qtdUm++;
i++;

             if(i>=VETOR_LENGHT) 
                 break;  
        }  
           
     v2[posicaoV2]=qtdUm;  
     VETOR_LENGHT_v2++;         
     posicaoV2++;  
     qtdUm=0;  
           
     if(i>=VETOR_LENGHT)  
         break;  
}//FIM DO 'WHILE';

// Saída de dados - v1[] e v2[];
System.out.print(“V1[] “);
for (int j = 0; j < v1.length; j++) {
System.out.print(v1[j]+”\t”);
}
System.out.println("\n V2[]");
for (int j = 0; j < VETOR_LENGHT_v2; j++) {
System.out.print(v2[j]+"\t");
}
}
}[/code]

Abraço, mt PAZ