Babixa Posted April 13, 2013 at 11:32 AM Report #503063 Posted April 13, 2013 at 11:32 AM Boas pessoal . Tenho um trabalho para uma cadeira da faculdade em que tenho de programar em java. Tou com sérios problemas em resolvê-lo. Já pesquisei pesquisei pesquisei e sinceramente ainda não percebi como é que isto se faz. O problema é: Faça o programa P04ArrayCopyWithoutReps que declare um array de 20 inteiros, iniciados através do uso do gerador aleatório Random, com um valor compreendido entre 0 e 50, mostre o conteúdo do array numa linha, determine quantas repetições existem (se o array tiver: {2,4,5,2,4,3,2} nele existem três repetições), copie o seu conteúdo para um novo array mas de modo a eliminar as repetições, e mostre o conteúdo do novo array numa linha. Deverá manter o posicionamento relativo dos valores (o resultado do outro array seria: {2,4,5,3}), exceptuando claro as repetições e o novo array deve ter a dimensão estritamente necessária para conter os valores inicias sem as repetições. O meu código é: import java.util.Random; public class P04ArrayCopyWithoutReps { static int comparar(int[] arr, int value){ for(int i = 0; i < arr.length; i++){ if(arr[i] == value) return i; } return -1; } public static void main(String[] args){ Random rg = new Random(); int um[] = new int[20]; int dois[] = new int[20]; System.out.println("O array gerado com os números entre 0 e 50 é: "); for (int i = 0; i < 20; i++){ um[i] = rg.nextInt(51); System.out.print(um[i] + " "); } int index = 0; for(int i = 0; i < um.length; i++) { index = comparar(um, um[i]); if((index >= 0) && (index < i)){ //aqui tenho de eliminar o valor repetido }else{ dois[i] = um[i]; } } System.out.println(""); System.out.println("O array resultante é: "); for (int i = 0; i < dois.length; i++){ System.out.print(dois[i] + " "); } } } A minha maior dúvida é como eliminar a posição do array. Sugeriram-me que mudasse todas as posições do array para a esquerda, mas não sei como fazê-lo. E acho que o array dois[] não deveria ter tamanho definido, mas não consigo fazê-lo de outra maneira. Fico à espera que me possam ajudar 😉
HappyHippyHippo Posted April 13, 2013 at 12:05 PM Report #503067 Posted April 13, 2013 at 12:05 PM dica : não eliminas, simplesmente não copias. o segredo está em saber se deves copiar ou não : não te vem à cabeça como o fazer ? 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 13, 2013 at 12:44 PM Author Report #503072 Posted April 13, 2013 at 12:44 PM Sinceramente não. Tive a pensar na tua resposta mas não faço ideia de como fazer :x Mas obrigada pela dica.
HappyHippyHippo Posted April 13, 2013 at 01:19 PM Report #503077 Posted April 13, 2013 at 01:19 PM (edited) cria um código que copia um array para um segundo array, algo deste género: int origem[1000]; int destino[1000]; int norigem = 0; int ndestino = 0; // preencher o array "origem" for (int i = 0; i < norigem; i++) { if (/*se devo copiar para o destino*/) { destino[ndestino] = origem[i]; ndestino++; } } agora pensa, o que leva a que possa ou não copiar um número da origem para o destino ? Edited April 13, 2013 at 01:19 PM by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 13, 2013 at 01:25 PM Author Report #503078 Posted April 13, 2013 at 01:25 PM Então, supostamente só posso copiar para o destino se no array origem ainda não tiver nenhum número igual, certo?
HappyHippyHippo Posted April 13, 2013 at 09:15 PM Report #503111 Posted April 13, 2013 at 09:15 PM será quase isso só deverás copiar se nunca tiveres tive copiado um número com o mesmo valor. agora arranja uma solução para poder implementar essa regra 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 15, 2013 at 09:12 PM Author Report #503307 Posted April 15, 2013 at 09:12 PM Não consigo chegar à condição necessária :x E até já sonho com isto :O
HappyHippyHippo Posted April 15, 2013 at 09:53 PM Report #503315 Posted April 15, 2013 at 09:53 PM ok, ok ... int origem[1000]; int destino[1000]; int hits[50]; int norigem = 0; int ndestino = 0; // preencher o array "origem" for (int i = 0; i < 50; i++) { hits[i] = 0; } for (int i = 0; i < norigem; i++) { if (!hits[origem[i]]) { hits[origem[i]] = 1; destino[ndestino] = origem[i]; ndestino++; } } 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 16, 2013 at 03:02 PM Author Report #503403 Posted April 16, 2013 at 03:02 PM Eish, obrigada *.* Já percebi 😉 Mas está a dar-me erro no ! ... Diz que o operador é indefinido para o tipo inteiro ...
HappyHippyHippo Posted April 16, 2013 at 03:09 PM Report #503406 Posted April 16, 2013 at 03:09 PM altera para : if (hits[origem[i]] == 0) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 16, 2013 at 10:11 PM Author Report #503493 Posted April 16, 2013 at 10:11 PM (edited) Eu não consigo definir os arrays dessa maneira. O meu código agora está assim: import java.util.Random; public class testar { public static void main(String[] args){ Random rg = new Random(); int origem[] = new int[20]; int destino[] = new int[20]; int hits[] = new int[50]; int nOrigem = 0; int nDestino = 0; System.out.println("O array gerado com os números entre 0 e 50 é: "); for (int i = 0; i < origem.length; i++){ origem = rg.nextInt(51); System.out.print(origem + " "); } for (int i = 0; i < 50; i++) { hits = 0; } System.out.println(" "); System.out.println("O array resultante é: "); for (int i = 0; i < nOrigem; i++){ if (hits[origem] == 0){ hits[origem] = 1; destino[nDestino] = origem; nDestino++; System.out.print(destino[nDestino] + " "); } } } } Edited April 17, 2013 at 10:26 AM by brunoais geshi
HappyHippyHippo Posted April 17, 2013 at 02:22 AM Report #503506 Posted April 17, 2013 at 02:22 AM destino[nDestino] = origem[i]; // gravas o valor em nDestino nDestino++; // incrementas o valor de nDestino System.out.print(destino[nDestino] + " "); // que valor apresentas aqui ???? estás a começar a programar, deverias ignorar código que pode levar a erro. separa sempre o código funcional do código de apresentação, dessa forma não terias esse erro .... import java.util.Random; import java.util.Arrays; public class testar { public static void main(String[] args){ Random rg = new Random(); int origem[] = new int[20]; int destino[] = new int[20]; int hits[] = new int[50]; int nOrigem = 0; int nDestino = 0; System.out.println("O array gerado com os números entre 0 e 50 é: "); for (int i = 0; i < origem.length; i++) { origem[i] = rg.nextInt(51); } // separação de código !!! apresentação do array for (int i = 0; i < origem.length; i++) { System.out.print(origem[i] + " "); } // só para aprenderes coisas novas Arrays.fill(hits, 0); for (int i = 0; i < nOrigem; i++){ if (hits[origem[i]] == 0) { hits[origem[i]] = 1; destino[nDestino] = origem[i]; nDestino++; } } // separação de código !!! apresentação do array System.out.println(" "); System.out.println("O array resultante é: "); for (int i = 0; i < nDestino; i++){ System.out.print(destino[i] + " "); } } } 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 17, 2013 at 09:45 AM Author Report #503542 Posted April 17, 2013 at 09:45 AM Sim, ainda estou muito no principio, mas estás a dar-me uma grande ajuda 😉 Já agora, se: int nOrigem = 0; int nDestino = 0; quando se entra nos for's o i não é menor do que o nOrigem e do que o nDestino...
Babixa Posted April 17, 2013 at 09:56 AM Author Report #503543 Posted April 17, 2013 at 09:56 AM (edited) E não é necessário incrementar nOrigem++; ?? Caso contrário o nOrigem não muda de valor... Edited April 17, 2013 at 10:38 AM by Babixa
HappyHippyHippo Posted April 17, 2013 at 10:09 AM Report #503547 Posted April 17, 2013 at 10:09 AM E não é necessário incrementar nOrigem++; ?? Caso contrário o nOrigem não muda de valor... sim, é fiz copy paste do teu código e nem olhei para isso 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 17, 2013 at 10:38 AM Author Report #503564 Posted April 17, 2013 at 10:38 AM Bem, eu incrementei o nOrigem++; no for para criar o array destino. Agora, o que ele está a fazer é, assim que ver o primeiro valor repetido já não copia mais valores nenhuns ...
HappyHippyHippo Posted April 17, 2013 at 10:41 AM Report #503566 Posted April 17, 2013 at 10:41 AM (edited) Bem, eu incrementei o nOrigem++; no for para criar o array destino. // criação da lista de números !!! System.out.println("O array gerado com os números entre 0 e 50 é: "); for (int i = 0; i < origem.length; i++) { origem[i] = rg.nextInt(51); nOrigem++; // <------ aqui } ----------------------------- melhor ainda é descartar essa variável: import java.util.Random; import java.util.Arrays; public class testar { public static void main(String[] args){ Random rg = new Random(); int origem[] = new int[20]; int destino[] = new int[20]; int hits[] = new int[50]; int nDestino = 0; System.out.println("O array gerado com os números entre 0 e 50 é: "); for (int i = 0; i < origem.length; i++) { origem[i] = rg.nextInt(51); } // separação de código !!! apresentação do array for (int i = 0; i < origem.length; i++) { System.out.print(origem[i] + " "); } // só para aprenderes coisas novas Arrays.fill(hits, 0); for (int i = 0; i < origem.length; i++){ if (hits[origem[i]] == 0) { hits[origem[i]] = 1; destino[nDestino] = origem[i]; nDestino++; } } // separação de código !!! apresentação do array System.out.println(" "); System.out.println("O array resultante é: "); for (int i = 0; i < nDestino; i++){ System.out.print(destino[i] + " "); } } } Edited April 17, 2013 at 10:43 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Babixa Posted April 17, 2013 at 02:46 PM Author Report #503630 Posted April 17, 2013 at 02:46 PM Boaaa, já está a funcionar ... Mil obrigadasss 😁
Fitorinaudo Posted April 18, 2013 at 09:45 PM Report #503904 Posted April 18, 2013 at 09:45 PM Yo. Desculpem lá, mas pa qqeq serve o vector hits[]? E Arrays.fill(hits, 0);´ ? Qeq isto faz tambem? É um metodo da biblioteca do java certo?
HappyHippyHippo Posted April 18, 2013 at 10:14 PM Report #503914 Posted April 18, 2013 at 10:14 PM Yo. Yo ... pa qqeq serve o vector hits[]? serve para guardar os números já inseridos no array final E Arrays.fill(hits, 0);´ ? serve para atribuir o valor do segundo argumento a todos os elementos do array IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now