Comparação de Arrays com Tolerância

2 respostas
A

Boa tarde!

Tenho um array de inteiros e terei de compará-lo com um segundo array, porém se aposição comparada do segundo for igual ou até 3 maior ele conta apenas uma vez

exemp:

existe uma ocorrencia no segundo 15, o usuário apertou o botão nos segundos 15 e 17, como está dentro da tolerância de 3 segundos o sistema deve contar apenas uma vez.

Montei a seguinte lógica, mas o sysout retorna os acertos fora dessa regra…

Neste código abaixo o sysout deveria retornar :Ruídos existentes 10 e Acertos:7 , mas está retornando 10 nos dois, ou seja, está contando os segundos 13,52,63 mais os 10,50,60.

public class Arrays {

	public static void main(String[] args) {
		
		int[] parametro = {0,10,20,30,40,50,60,70,80,90,100};
		int[] selecionado = {0,10,13,20,40,50,52,60,63,67,70,75,88,91};
		int acertos = 0;

		for (int i = 1; i < selecionado.length; i++) {			
			
			for (int j=1; j < parametro.length; j++){				
				if (selecionado[i]>=parametro[j] && selecionado[i]<=(parametro[j]+3) ){
					acertos++;
				}
			}
		}
		System.out.println("Ruídos Existentes:"+(parametro.length-1));
		System.out.println("Acertos:"+acertos);
	}
}

Alguém tem um luz?

Abraços!

2 Respostas

yurifw

vc ta declarando as variaveisdo seu loop pra começarem no 1, porem o indice de um array começa no 0
outra coisa q n entendi foi essa sua expressão no if, o objetivo n é ver se array parametro tem algum elemento que se repete no selecionado? da uma olhada:

public static void main(String[] args) {

        int[] parametro = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
        int[] selecionado = {0, 10, 13, 20, 40, 50, 52, 60, 63, 67, 70, 75, 88, 91};
        int acertos = 0;

        for (int i = 0; i < selecionado.length; i++) {
            for (int j = 0; j < parametro.length; j++) {
                if (selecionado[i] == parametro[j]) {
                    acertos++;
                    break;
                }
            }

        }
        System.out.println("Ruídos Existentes:" + (parametro.length - 1));
        System.out.println("Acertos:" + acertos);
    }
A
yurifw:
vc ta declarando as variaveisdo seu loop pra começarem no 1, porem o indice de um array começa no 0 outra coisa q n entendi foi essa sua expressão no if, o objetivo n é ver se array parametro tem algum elemento que se repete no selecionado? da uma olhada:
public static void main(String[] args) {

        int[] parametro = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
        int[] selecionado = {0, 10, 13, 20, 40, 50, 52, 60, 63, 67, 70, 75, 88, 91};
        int acertos = 0;

        for (int i = 0; i < selecionado.length; i++) {
            for (int j = 0; j < parametro.length; j++) {
                if (selecionado[i] == parametro[j]) {
                    acertos++;
                    break;
                }
            }

        }
        System.out.println("Ruídos Existentes:" + (parametro.length - 1));
        System.out.println("Acertos:" + acertos);
    }

Olá Yuri,
Eu iniciei o loop no valor 1 pra ignorar o 0, já na comparação conforme eu informei tenho uma tolerância de 3 pra mais para contar, ou seja, se não tem valor 10 mas tem 11 ou 12 ou 13 ele irá contar, mas somente uma vez entendeu?
Do jeito que você colocou ele está comparando e contando somente os que são iguais...
Exemplo, lá no array selecionado troca o 10 por 13, ele esté dentro dos 3 de tolerância então deveria contar.

Obrigado pela ajuda, tem alguma outra sugestão?

Abraços!

Criado 13 de agosto de 2013
Ultima resposta 14 de ago. de 2013
Respostas 2
Participantes 2