Firewall Posted May 10, 2013 at 10:42 PM Report #506795 Posted May 10, 2013 at 10:42 PM (edited) Olá á todos Bem me deparo com um problema, eu estou fazendo um programa que o usuário digite o tamanho do vetor, e após definir o tamanho preencher todo o vetor com números. Até aqui tudo bem(muito fácil...até de mais). Mas agora tem um pequeno problema eu consegui fazer para verificar se existe números iguais e mostrar, mas quando eu rodo o programa ele funciona perfeitamente até quando tiver 2 números iguais, se passar de 2 números iguais em no vetor ele já fica doido. olhe minha lógica: for(int i=0;i<TAMVET-1;i++){ for(int j = i+1; j <TAMVET;j++){ if (numero[j] == numero[i]) { System.out.println("O elemento" +numero[j] + "se repete \n"); } } } já fiz vários tipos de estrutura para pegar o valor que se repete no vetor, mas o que até agora oque deu mais certo foi este. import javax.swing.JOptionPane; public class vetor10PosiçõesInformarIguais { public static void main(String[] args){ int TAMVET = Integer.parseInt(JOptionPane.showInputDialog("Porfavor, Informe o Tamanho do Vetor")); //Foi colocado para o usuario digitar o tamanho do VETOR( isto para vcs fazerem testes, pra ficar mais agilizado int numero[] = new int[TAMVET]; // o tamanho informado será armazenado na array "numero" String m = ""; //isto servira como um System.out.println, já que estamos utilizando interface gráfica boolean verificador = false; //um simples operador de decisão para o Bubble sort e para mostrar se há ou nao valores repetidos no vetor boolean repetiu = false; // ele será para verficar se repetiu ou nao o numero no vetor...mas devem estar se perguntando porque nao utilizei o boolean acima(verificador),Simples a variavel só poderá realizar a sua designação, se utilizar a mesma variavel para fazer varios tipos de decisões que nao tem nada a ver com o motivo na qual ela foi criada, o programa não estará seguindo a convenção de código //Este Ciclo for será para armazenar valores no vetor "numero" for(int i = 0; i < TAMVET; i++){ int x = Integer.parseInt(JOptionPane.showInputDialog("Digite o Numero da " +(i)+ "º Posição do Vetor"));// utilizamos a variavel de escopo temporaria x para receber o valor informado pelo usuario numero[i] = x; } /* * Este while(abaixo) fará oque nós programadores conhecemos como Bubble sort, ele téra como funcionalidade, organizar o vetor do menor numero ao maior por exemplo * Se no vetor foi armazenado assim(supondo que seja 3 numeros): [5,8,0,2] * o Bubble sort irá organizar desta forma [0,2,5,8]. * Mas porque foi utilizado o Bubble sort? * R: Relativamente Simples(relativamente *-*),existem varias formas de se resolver o problema proposto por este exercicio,mas a forma que utilizei irá fazer * com que ele olhe na posição seguinte e veja se ela é ou nao parecida e se nao for pula pra proxima linha do vetor e assim se nao utilizar o Bubble sort irá * sempre dar um monte de numeros nada a ver com oque foi digitado. */ while(!verificador){ //se verificador for diferente de true entao ele entrano ciclo, lembrando oque foi feito nesta linha é um resumo de while(verificador != true){ verificador = true; //o verficador é atribuido verdadeiro for(int i=0; i<TAMVET-1; i++){ //até aqui tudo bem só uma estrutura para percorrer o vetor if(numero[i] > numero[i+1]){ //se o numero, for maior que o, numero uma posição a frente, então ele entra no ciclo verificador = false; // e o verificador é atribuido o valor de falso int x = numero[i+1];// a variavel de escopo temporaria o "x" para armazenar o valor de numero na posição +1(a frente) do ciclo for(o i) numero[i +1]= numero[i]; // o valor de numero na posição +1(a frente) do ciclo for(o i) irá receber o numero na posição do ciclo sem nehuma modificação numero[i] = x; // e assim o numero do ciclo sem modificação irá receber o valor de x } //fechamos o if } // fechamos o for } //por fim, fechamos o while /* * Ahá, Agora vem a parte sistematica do programa aonde nós realmente iremos resolver o problema do exercicio proposto: * no final irei explicar oque foi feito para descobrir qual os valores que foram repetidos, não explicarei agora porque explicar sem ver é complicado */ m+=("-----------~~'OS Valores Repetidos'~~-------------- \n"); // a varivel m fará um papel parecido do System.out.println aonde mostrar em uma janela a mensagem que foi informada for(int i=0;i<TAMVET-1;i++){ for(int j = i+1; j <TAMVET;j++){ if (numero[j] == numero[i]) { repetiu = true; m+=("O elemento" +numero[j] + "se repete \n"); } } } if(!repetiu){m+=(" ~~'Nenhum Elemento Foi Repetido'~~");} JOptionPane.showMessageDialog(null,m); } } Edited May 15, 2013 at 01:26 AM by Firewall Corrigida indentação.
HappyHippyHippo Posted May 10, 2013 at 11:18 PM Report #506798 Posted May 10, 2013 at 11:18 PM (edited) xiii .... int numero[] = new numero[10]; // isto é exemplo porque dizes que está feito Arrays.sort(numero); // ordenar o array for (int i = 1; i < numero.length(); i++) { // ciclo de comparação if (numero[i] == numero[i-1]) // comparação com o anterior, lembra-te que o array já se encontra ordenado System.out.println("O elemento" +numero[j] + "se repete"); // não é necessário o '\n', a função println já faz isso } Edited May 10, 2013 at 11:19 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Firewall Posted May 11, 2013 at 12:05 AM Author Report #506817 Posted May 11, 2013 at 12:05 AM Primeiramente obrigado por responder... fiz uma correção para dar certo.... for (int i = 1; i < numero.length; i++) { // no length nao precisa ter o (), somente se for em um método(pelo que eu me lembre é, me corriga se eu estiver errado) } HappyHippyHippo, ficou na mesma coisa, olhe bem se eu fazer assim se eu colocar mais de 2 numeros iguais ele buga todo, olha o exemplo... agora irei preencher o vetor de tamanho 4, vamos supor que o usuario digitou e foi ordenado, e ficou assim [1,1,6,7] o programa irá me mostrar assim: O elemento 1 se repete O elemento 2 se repete Ok, deu tudo certo.... mas olhe oque acontece em um segundo exemplo... agora irei preencher o vetor de tamanho 4, vamos supor que o usuario digitou e foi ordenado, e ficou assim [1,1,1,7] o programa irá me mostrar assim: O elemento 1 se repete O elemento 1 se repete Viu.. não sei porque o programa faz isto... ou minha lógica está errada, ou não sei... @OBS: pode me dizer como você fez pra o código ficar colorido... fica mais fácil a compreensão 😃
HappyHippyHippo Posted May 11, 2013 at 12:20 AM Report #506820 Posted May 11, 2013 at 12:20 AM Ok, deu tudo certo.... mas olhe oque acontece em um segundo exemplo... agora irei preencher o vetor de tamanho 4, vamos supor que o usuario digitou e foi ordenado, e ficou assim [1,1,1,7] o programa irá me mostrar assim: O elemento 1 se repete O elemento 1 se repete Viu.. não sei porque o programa faz isto... ou minha lógica está errada, ou não sei... int last = numero[0] + 1; // variável usada para prevenir a repetição do valor for (int i = 1; i < numero.length; i++) { if (numero[i] == numero[i-1] && last != numero[i-1]) { // o valor a ser verificado tem de ser diferente do último apresentado last = numero[i]; // actualizar a variável de verificação System.out.println("O elemento" + last + "se repete"); } } @OBS: pode me dizer como você fez pra o código ficar colorido... fica mais fácil a compreensão =) quando escreves código no forum, usaste as tags [ code] e [ /code] (sem espaços claro) para activar o syntaxe highlight, tens de definir qual a linguagem que estás a apresentar: [ code=java] ... [ /code] (sem espaços claro) 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Solution Firewall Posted May 11, 2013 at 12:34 AM Author Solution Report #506821 Posted May 11, 2013 at 12:34 AM Muito obrigado não me atentei em fazer uma variável para fazer a intermediação, e ainda por cima estava fazendo o inverso... obrigado 😃 e para fins didáticos caso alguém queira , aqui esta o código com funcionando, import java.util.Arrays; import javax.swing.JOptionPane; public class PaneEX2 { public static void main(String[] args){ int TAMVET = Integer.parseInt(JOptionPane.showInputDialog("Porfavor, Informe o Tamanho do Vetor")); //Foi colocado para o usuario digitar o tamanho do VETOR( isto para vcs fazerem testes, pra ficar mais agilizado int numero[] = new int[TAMVET]; // o tamanho informado será armazenado na array "numero" String m = ""; //isto servira como um System.out.println, já que estamos utilizando interface gráfica boolean repetiu = false; // ele será para verificar se repetiu ou não o numero no vetor... //Este Ciclo for será para armazenar valores no vetor "numero" for(int i = 0; i < TAMVET; i++){ numero[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite o Numero da " +(i)+ "º Posição do Vetor"));// utilizamos a variavel de escopo temporaria x para receber o valor informado pelo usuario } Arrays.sort(numero); // ordenar o vetor m+=("-----------~~'OS Valores Repetidos'~~-------------- \n"); // a varivel m fará um papel parecido do System.out.println aonde mostrar em uma janela a mensagem que foi informada e o += serve para somar o conteudo na mesma janela ou seja, tudo que for informado para o m+= será acrecentado na mesma janela anterior. int last = numero[0] + 1; // variável usada para prevenir a repetição do valor for (int i = 1; i < numero.length; i++) { if (numero[i] == numero[i-1] && last != numero[i-1]) { // o valor a ser verificado tem de ser diferente do último apresentado repetiu = true; last = numero[i]; // actualizar a variável de verificação System.out.println("O Numero: " + last + " Se Repete no Vetor"); } } if(!repetiu){m+=(" ~~'Nenhum Elemento Foi Repetido'~~");} JOptionPane.showMessageDialog(null,m); // mostra na janela a variavel m. } } Agradecimento á HappyHippyHippo, pela grande ajuda.
Lucas Posted January 3, 2023 at 10:13 PM Report #629387 Posted January 3, 2023 at 10:13 PM Em 10/05/2013 às 21:34, Firewall disse: Muito obrigado não me atentei em fazer uma variável para fazer a intermediação, e ainda por cima estava fazendo o inverso... obrigado 😃 e para fins didáticos caso alguém queira , aqui esta o código com funcionando, import java.util.Arrays; import javax.swing.JOptionPane; public class PaneEX2 { public static void main(String[] args){ int TAMVET = Integer.parseInt(JOptionPane.showInputDialog("Porfavor, Informe o Tamanho do Vetor")); //Foi colocado para o usuario digitar o tamanho do VETOR( isto para vcs fazerem testes, pra ficar mais agilizado int numero[] = new int[TAMVET]; // o tamanho informado será armazenado na array "numero" String m = ""; //isto servira como um System.out.println, já que estamos utilizando interface gráfica boolean repetiu = false; // ele será para verificar se repetiu ou não o numero no vetor... //Este Ciclo for será para armazenar valores no vetor "numero" for(int i = 0; i < TAMVET; i++){ numero[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite o Numero da " +(i)+ "º Posição do Vetor"));// utilizamos a variavel de escopo temporaria x para receber o valor informado pelo usuario } Arrays.sort(numero); // ordenar o vetor m+=("-----------~~'OS Valores Repetidos'~~-------------- \n"); // a varivel m fará um papel parecido do System.out.println aonde mostrar em uma janela a mensagem que foi informada e o += serve para somar o conteudo na mesma janela ou seja, tudo que for informado para o m+= será acrecentado na mesma janela anterior. int last = numero[0] + 1; // variável usada para prevenir a repetição do valor for (int i = 1; i < numero.length; i++) { if (numero[i] == numero[i-1] && last != numero[i-1]) { // o valor a ser verificado tem de ser diferente do último apresentado repetiu = true; last = numero[i]; // actualizar a variável de verificação System.out.println("O Numero: " + last + " Se Repete no Vetor"); } } if(!repetiu){m+=(" ~~'Nenhum Elemento Foi Repetido'~~");} JOptionPane.showMessageDialog(null,m); // mostra na janela a variavel m. } } Agradecimento á HappyHippyHippo, pela grande ajuda. Olá, eu não intendo nada de programação, mas preciso de um app com essas funções. Pode me ajudar?
thoga31 Posted January 4, 2023 at 04:29 PM Report #629429 Posted January 4, 2023 at 04:29 PM Em 03/01/2023 às 22:13, Lucas disse: Olá, eu não intendo nada de programação, mas preciso de um app com essas funções. Pode me ajudar? Cria um tópico com as tuas dúvidas e questões. Cumprimentos. Knowledge is free!
Recommended Posts