olá estou criando um programa que mostre quantas vezes um numero foi lido dentro do vetor mas não queria que um numero já lido se repetisse, por exemplo, se o vetor tem 12, 13, 12 queria que a saida fosse “O número 12 aparece 2 vez(es) no vetor”
“O número 13 aparece 1 vez(es) no vetor”
import java.util.ArrayList;
public class MainDeContagem {
public static void main(String[] args) {
String resposta = "sim";
ArrayList<Integer> todosOsNumeros = new ArrayList<Integer>();
int cont = 0,num = 0,vezes = 0;
Scanner input = new Scanner(System.in);
while(resposta.equalsIgnoreCase("sim")) {
System.out.println("Você deseja fornecer um número?");
resposta = input.nextLine();
if (resposta.equalsIgnoreCase("sim")) {
++cont;
System.out.println("Informe o " + cont + "º número:");
todosOsNumeros.add(Integer.parseInt(input.nextLine()));
}
}
for (int x=0; x<todosOsNumeros.size(); x++) {
for (int y=0; y<todosOsNumeros.size(); y++) {
if (todosOsNumeros.get(x) == todosOsNumeros.get(y)) {
vezes++;
num = todosOsNumeros.get(x);
}
}
System.out.println(" O número " + num +" foi lido " + vezes + " vez (es).");
vezes = 0;
}
}
}
No seu caso eu recomendaria você utilizar HashMaps, no HashMap você pode setar uma key e atribuir um valor a essa KEY. Que no seu caso a key seria o número em questão e o valor atribuido são quantas vezes ele já foi lido
Crie um HashMap:
HashMap<Integer, Integer> numerosLidos = new HashMap<>();
Agora já te dei a base…você pode brincar com ele e fazer com que faça o que você quer funcionar.
Algumas funções do HashMap:
.containsKey() - Verifica se já existe uma chave dentro do HashMap
.put(Integer, Integer) - Coloca novos itens dentro do HashMap
.get(key).setValue(integer) - Seta um novo valor para a key expecifica.
Se tiver mais dúvidas da uma olhada na internet sobre HashMaps.
1 curtida
Esse setValue() seria da classe Map.Entry, né?
get() não retorna exatamente Map.Entry (a não ser que vc declare com <K, Map.Entry>
).
1 curtida
Verdade! Tinha me esquecido, esse setValue() ficará somente disponível se o objeto em questão tiver esse método, não é o método para mudar o valor de uma key dentro do HashMap.
Para isso use o EntrySet<Integer, Integer> dentro de um loop e verifique se a key do EntrySet é compativel com o objeto comparável e então faça a alteração direto no HashMap pois assim você terá a posição (key) correspondente na qual você quer alterar.
Eu Consegui resolver da seguinte forma:
fiz mais um for e um array para identificar os já lidos… Obrigada pela ajuda e todos!!!
public class MainDeContagem {
public static void main(String[] args) {
String resposta = “sim”;
ArrayList todosOsNumeros = new ArrayList();
int cont = 0,num = 0,vezes = 0;
Integer recebido;
Scanner input = new Scanner(System.in);
ArrayList<Integer> lidos = new ArrayList<Integer>();
while(resposta.equalsIgnoreCase("sim")){
System.out.println("Você deseja fornecer um número?");
resposta = input.nextLine();
if(resposta.equalsIgnoreCase("sim")) {
++cont;
System.out.println("Informe o " + cont + "º número:");
recebido = Integer.parseInt(input.nextLine());
if(recebido >= 0 && recebido <= 100 ){
todosOsNumeros.add(recebido);
}else{
System.out.println("Número invalido");
}
}
}
for(int x=0; x<todosOsNumeros.size(); x++){
for(int y=0; y<todosOsNumeros.size(); y++){
if (todosOsNumeros.get(x) == todosOsNumeros.get(y)){
vezes++;
num = todosOsNumeros.get(x);
}
}
int contagem = 0;
for(int i = 0 ; i < lidos.size(); i ++){
if(lidos.get(i) != num)
contagem +=1;
}
if(contagem == lidos.size() || vezes == 1){
System.out.println(" O número " + num +" foi lido " + vezes + " vez (es).");
vezes = 0;
}
lidos.add(x);
}
}
Refatorei o seu código usando Map e compute().
public class MainDeContagem {
public static void main(String[] args) {
String resposta = "sim";
Map<Integer, Integer> numeros = new HashMap<>();
int cont = 0, recebido = 0;
Scanner input = new Scanner(System.in);
while(resposta.equalsIgnoreCase("sim")){
System.out.println("Você deseja fornecer um número?");
resposta = input.nextLine();
if(resposta.equalsIgnoreCase("sim")) {
++cont;
System.out.println("Informe o " + cont + "º número:");
recebido = Integer.parseInt(input.nextLine());
if(recebido >= 0 && recebido <= 100 ) {
numeros.compute(recebido, (k, v) -> v == null ? 1 : v + 1);
} else{
System.out.println("Número invalido");
}
}
}
for (Map.Entry<Integer, Integer> entry : numeros.entrySet()) {
int num = entry.getKey();
int vezes = entry.getValue();
System.out.println(" O número " + num +" foi lido " + vezes + " vez (es).");
}
}
}
1 curtida