Exercicio vetor

9 respostas
V

Olá pessoal,

Essa é a primeira vez que posto aqui, estou com uma duvida em um exercicio, se alguem puder me ajudar ficarei grato!!Segue:

Utilizando a classe Scanner faça um programa que solicite a entrada de 10
números inteiros, verifique a freqüência de ocorrência de cada número no vetor.

import java.util.Scanner;

public class Exe11 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int[] array = new int[10];
		int count = 1;
		
		for (int i = 0; i < 10; i++) {
			System.out.println(": ");
			array[i] = s.nextInt();
		}
		for (int i = 0; i < 9; i++) {
			for (int j = i + 1; j < 10; j++)
				if (array[i] == array[j]) {
					count++;					
				}
			System.out.println(array[i] + " aparaceu " + count + " veze(s).");
			count = 1;
		}
	}
}

Preciso de um jeito que faça eu não contar o mesmo numero que já apareceu anteriormente, eu não consigo atribuir nulo ou fazer outra coisa…enfim é isso, se puderem melhorar meu codigo ou me mostrar outra forma de fazer!!!

9 Respostas

ViniGodoy

O exercício não limita qual o intervalo máximo do número (de 0 até 50, por exemplo?). Caso contrário, vai ser bem difícil resolve-lo.

No exemplo baixo, conta números no intervalo de 0 até 15:
import java.util.Scanner;

public class Exe11 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int contadores[] = new int[16];

        for (int i = 0; i &lt; 10; i++) {
            System.out.printf(&quot;Entre com o %do número (de 0 até 15): &quot;, (i+1));
            int num = Integer.parseInt(in.nextLine());
            contadores[num]++;
            System.out.println();
        }

        for (int i = 0; i &lt; contadores.length; i++) {
            System.out.printf(&quot;O número %d apareceu %d vezes.%n&quot;, i, contadores[i]);
        }
    }
}
V

Obrigado ViniGodoy…
Mas então no enuciado do exercicio não diz nada sobre limite,
Se eu conseguisse eliminar os numeros quando eles se repetem acho que meu codigo daria certo, mas acho que isso só com a classe Array, estou certo?!

ViniGodoy

A forma mais fácil sem especificar um limite é usando uma classe especial do Java chamada Map.

Daria para fazer um programa simples também se você já soubesse montar suas classes, mas não parece ser o caso desse exercício.

De onde você tirou o exercício?

V

Tirei daqui:
http://www.t2ti.com/java_starter/modulos/Java_Basico_Modulo_03.pdf

São dez apostilas muito boas e gatuitas, já li a apostila da caelum tambem a fj 11, mas queria fazer mais exercicios e encontrei ela.
Por curiosidade(pois realmente acho não ser o caso do exercicio) como faria usando uma classe de maneira simples, não precisa por o codigo completo, só da uma luz!!
Thanks…

E

Cara não deu para entender muito bem o que tu quer fazer mas se foi o que eu entendi, a melhor maneira e vc criar um objeto com dois atributos numero e quantidade , e criar um lista desse objeto, de forma que a cada numero que vc encontra vc tem um metodo que ou soma 1 na quantidade caso essa elemento ja esteja na lista ou add um novo objeto na lista com o numero novo e com 1 em quantidade…
mais ou menos assim:

class Num {
  int numero;
  int qtd;
  public Num(int n){
    numero=n;
    qtd=1;
}
}
//classe lista agora
class ListaNum{
  Num info;
  ListaNum prox;
  public ListaNum(int numero){
    info=new Num(numero);
    prox=null;
}
  public ListaNum(Num num, ListaNum lista){
    info=num
    prox=lista;
}
}
//classe principal agora
...
public void adicionar(int numero,ListaNum lista){
  Num encotrado=encotra(numero,lista);
  if(encontrado==null)
     lista=new ListaNum(new Num(numero),lista);
  else
     encontrado.qtd++;
}
public Num encotra(int numero,ListaNum lista){
  if(lista==null)
    return null
  else{
    if(lista.info.numero==numero)
       return lista.info;
    else
       return encontra(numero,lista.prox);
}
}
//metodo principal
..{
ListaNum lista;
int[] entradas=...;
for (int i=0;i<entradas.lenght;i++){
   adicionar(entradas[i],lista);
}//agora chega senao vou fazer o trabalho todo...rsrs
}

e basicamente isso tem q completar… se fizer um toString() no Num ou no listaNum ja facilita bastante…

V

eduardojandre, eu entendi sua sugestão, mais o código eu fiquei perdido total…principalmente a classe ListaNum, achei que vc montaria um array, e no metodo adicionar, passa como argumento um int numero (até ai sem problema), mas oq seria o argumento do tipo ListaNum lista!!
Mas mesmo assim valew, vou continuar tentando!!

E

Não entendi bem sua pergunta, poderia explicar melhor?
ListaNum nao deixa de ser um array, um array e uma lista encadeada o java tem pronto arraylists ja so que ate para aprendizado aconselho que vc crie suas proprias listas o que te da mais conhecimento e um poder de customização muito melhor…
tentando explicar melhor vc tem um objeto (num) e tem uma lista desse objeto(listaNum) e vc vai lendo inteiros e caso nao exista nenhum objeto (num) representando esse inteiro vc cria um novo objeto(num) e add a lista (listaNum) caso ja existe vc incrementa a qtd do objeto(num), basicamente vc declara uma lista(listaNum) q vc vai usar para armazenar os objetos e a cada inteiro vc manda add nesse lista e essa logica se ja existe ou nao fica por conta do add… entendeu?

V

Mas como eu percorro essa lista, tipo sem o “[” e ']".
Pelo oq eu entendi quando o metodo adicionar é acionado pela primeira vez a lista será nula então vc instancia uma nova lista (linha 27), na variavel lista, mas ao fim do método eu não perderia a referencia a ela, pois a variavel lista desaparece ao final do escopo do método adicionar?!

E

vc pode criar algum metodo pra percorrer ela ou atraves de uma variavel auxilar, recursivamente existe varias maneiras de fazer isso… isso e um pouco do conceito de ponteiro que em java esta encapsulado mais nao deixa de existir…de fato vc esta certo pelo a construção q fiz realmente a lista esta se perdendo , foi que fiz aqui de cabeça e rapidamente nao me liguei nisso mas e facil de resolver e so vc colocar o metodo add em vez de void retornar uma ListaNum e no final do metodo void dar um return lista, ou entao mudar a forma de construção da lista mas a primeira alternativa e mais facil e rapida…

Criado 4 de fevereiro de 2012
Ultima resposta 8 de fev. de 2012
Respostas 9
Participantes 3