Boa Noite Galera.
Bom como o problema dessa vez é mais complicado (pelo menos para mim) serei bem completo na pergunta.
É o seguinte. Preciso fazer um programa que leia N número e mostre os repetidos E quantas vezes foram repetidos.
O que eu ja fiz: ja li os números, ja organizei, e ja consigui mostrar os repetidos e quantas vezes foram repetidos.
Então qual é o problema??.
O problema é que quando se usa este vetor “vet[i+1]” como comparação é preciso que o for esteja com seu tamanho menos 1 (vet.length-1). Porque??. Porque por exemplo, em um vetor com 7 posições quando ele chegar em “vet[6]” ele ira comparar com o “vet[i+1]”, nesse caso, “vet[7]” que nao existe. Daiiii o que acontece, se eu escrever por exemplo “1,3,1,3,2,1,4,3” o meu programa roda perfeitamente. O troço esta quando o maior número (eu ordeno) esta repetido…ex: “1,3,1,3,2,1,3”
Então ai vai o que eu ja tenho (comentado):
<%
String nome = request.getParameter("nome"); //recebendo valor digitado na caixa no index.jsp
String vet[] = nome.split(","); //nao lembro :P
int cont = 1; //variavel usada para a repetição de numeros
int vet1[] = new int[vet.length]; // criando vetor inteiro
for(int i =0 ;i<vet.length;i++){
vet1[i] = Integer.parseInt(vet[i]); // transformando cada posição em inteiro, ja que recebe do index.jsp como string
}
for (int i =0;i<vet1.length;i++){
out.println (vet1[i]+" "); //mostrando vetor inteiro, só para verificar se o código até aqui esta dando certo
}
%><br><%
for (int j = 0; j <vet1.length;j++){
for (int i = 0; i < vet1.length-1;i++){
if (vet1[i] > vet1[i+1]){
int aux = vet1[i]; //nestes 2 for estou arrumando o vetor com bubblesort em ordem crescente (menor para o maior)
vet1[i] = vet1[i+1];
vet1[i+1] = aux;
}
}
}
for (int i = 0;i<vet1.length;i++){
out.println (vet1[i]+" "); //neste for estou mostrando o vetor ordenado para fins de verificação tambem..
}
%><br><%
for (int i = 0; i < vet1.length-1; i++){
if (vet1[i] == vet1[i+1]){ //comentario sobre este for fora do código
cont = cont + 1;
}else {
if (cont != 1){
out.println ("O número "+vet1[i]+" foi repetido "+cont+" vezes.<br>");
cont = 1;
}
}
}
%>
O que esta acontecendo ali: estou pegando cada posição do vetor e comparando com a próxima, se for igual o contador (cont) recebe +1, senão ele mostra quantos ja foram e volta para a proxima posição, se o vetor for diferente e houver apenas 1 vez o numero (cont = 1) ele nao aparece que foi repetido nenhuma vez.
O problema como podem notar neste caso “1,3,1,3,2,1,3” ordenado “1,1,1,2,3,3,3”, é que ao chegar no ultimo numero “3” ele nao entra no else para mostrar qnts vezes o “3” foi inserido, porque ele n pode compara o ultimo com o próximo, pois nao existe.
O que eu tentei…
tentei colocar o ultimo for desse jeito:
for (int i = 0; i < vet1.length-1; i++){
if (vet1[i] == vet1[i+1]){
cont = cont + 1;
}else {
if (cont != 1){
out.println ("O número "+vet1[i]+" foi repetido "+cont+" vezes.<br>");
cont = 1;
}
}
if (i == vet1.length){
out.println ("O número "+vet1[i]+" foi repetido "+cont+" vezes.<br>");
}
}
Como o cont tera parado em “3” no caso, ao chegar no ultima posição do vetor (i == vet1.length) tentei mostrar qnts “3” foram repetidos…MAS NAO VAI, é como se ele ignorase essa linha -.-, help-me please :twisted: